我有两个模型描述如下:
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属性,但理想情况下最新状态是该报告的最新状态,我该如何通过?
答案 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()