【问题标题】:Django model calculated field from one to many relationshipDjango模型计算字段从一对多关系
【发布时间】:2017-09-05 10:33:12
【问题描述】:

我已经使用 django API 继承了一些代码,并且正在尝试理解/掌握如何适当地修改它..

我有一个名为 Asset 的 Model 类和一个名为 Calibration 的 Model 类。

校准与资产具有多对一的关系,因此:

class Calibration(Record):
    ...
    asset = models.ForeignKey(Asset, relatedName = "calibrationRecords")
    ...

当我查看单个资产时,我可以看到预期的校准记录。

在 API 的另一部分,我可以列出给定客户的所有资产,但是在此页面上,calibrationRecords 链接未显示。

这没关系,因为我实际上不想在此视图上查看所有校准记录,但我想在此处查看最后(最近的)校准记录,因此实质上在此添加一个计算字段模型?

这个计算应该去哪里,最好的方法是什么?

【问题讨论】:

  • 您需要提供有关您要显示此内容的页面的更多详细信息。这可能不需要成为一个字段,但这取决于您的用例。您可能应该显示您的序列化程序和视图。

标签: django django-models django-rest-framework


【解决方案1】:

如果你想添加一个过滤模型的方法,你可以添加一个model.Manager

例如

class ReviewerManager(models.Manager):
    def get_all_the_younger_reviewers(self):
        return self.get_queryset().filter(age__lt=18)

class Reviewer(models.Model):
    first_name = models.CharField(max_lenght=50, null=False, blank=False)
    last_name = models.CharField(max_lenght=50, null=False, blank=False)
    age = models.IntegerField()

    objects = ReviewerManager()

    @property
    def full_name(self):
        return self.first_name + " " + self.last_name

现在您可以使用新方法进行过滤:

Reviewer.objects.get_all_the_younger_reviewers()

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2020-08-06
    • 2020-07-24
    相关资源
    最近更新 更多