我正在将Django 2.2.1与MariaDB 10.3.15一起使用。
我有这个模型:
class Hose(models.Model):
description = models.CharField(blank=True, max_length=250)
number = models.IntegerField(unique=True)
class HoseHistory(models.Model):
class Meta:
unique_together = (("date", "hose", "hose_event"),)
date = models.DateTimeField()
description = models.CharField(blank=True, max_length=250)
hose = models.ForeignKey(Hose, on_delete=models.CASCADE)
hose_event = models.ForeignKey(HoseEvent, on_delete=models.CASCADE)
现在,我想获得软管表的所有条目的列表,如果有的话,还有最新的HoseHistory行。
结果集应如下所示:
| Hose.description | Hose.number | HoseHistory.date | HoseHistory.description |
===============================================================================
| Example A | 1 | 2019-01-09 | Event A |
| Example B | 2 | NULL | NULL |
因此,详细而言,Django应该创建一个SQL查询,该查询选择Tabele Hose,左联接表HoseHistory,然后按Hose.number分组,然后按HoseHistory.date的所有MAX分组。
我尝试例如:
Hose.objects.values("number").annotate(max_date=Max("hosehistory__date")).order_by("hosehistory__date")
但是问题是,采用这种策略,我只有max_date
和number
列,如果我添加更多的列,这些列将被添加到GROUP BY
语句中,而该查询不会工作。
答案 0 :(得分:0)
您可以在模型中添加方法
def latest_history(self):
return HoseHistory.objects.filter(hose=self).order_by('-date').first()
并调用您的模板:{{ hose.latest_history }}
(如果存在最新历史记录)