从关系中获取独家(仅一个)最新相关对象

时间:2016-05-18 11:18:45

标签: python django django-models django-templates django-views

我有两个模型描述如下:

class Report(models.Model):
    report_name = models.CharField(max_length=140)
    report_description = models.TextField(null=True, blank=True)
    last_updated = models.DateTimeField(null=True, blank=True)
    metric = models.ManyToManyField(Metric, through='MetricAssociation')

class Status(models.Model):
    report = models.ForeignKey(Report, on_delete=models.CASCADE)
    status = models.CharField(max_length=140)
    provided_by = models.ForeignKey(TeamMember, on_delete=models.CASCADE)
    date = models.DateTimeField() 

我创建了一个包含所有报告和属性的索引页面。我想通过每个报告的最新状态,并在这样的视图中使用报告列表:

<td>{{ report.report_name }}</td>
<td>{{ report.last_updated }}</td>
<td>{{ report.latest_status }}</td>

由于报告没有latest_status属性,但理想情况下最新状态是该报告的最新状态,我该如何通过?

1 个答案:

答案 0 :(得分:3)

非常简单:&#34;最新状态&#34;对于Report实例是

`your_report_instance.status_set.order_by("date").last()`

现在由于这有点冗长,暴露了太多的实现并且无法从模板访问,您只需将调用封装在getter方法或property中,即:

class Report(models.Model):
    report_name = models.CharField(max_length=140)
    report_description = models.TextField(null=True, blank=True)
    last_updated = models.DateTimeField(null=True, blank=True)
    metric = models.ManyToManyField(Metric, through='MetricAssociation')

    @property
    def latest_status(self):
        return self.status_set.order_by("date").last()