Я использую 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, LEFTПрисоединяется к таблице HoseHistory, затем группируется по Hose.number, а затем все MAX по HoseHistory.date.
Я пробовал, например:
Hose.objects.values("number").annotate(max_date=Max("hosehistory__date")).order_by("hosehistory__date")
Но проблема в том, что с этой стратегией я толькоесть столбцы max_date
и number
, если я добавлю больше столбцов, они будут добавлены в оператор GROUP BY
, и этот запрос не будет работать.