У меня две модели: заправка и цена продукта. Цена может составлять 4 варианта, по одному для каждого типа продукта, не у каждой станции есть все четыре продукта. Я хочу запросить последнюю запись каждого из этих продуктов, предпочтительно одним запросом:
class GasStation(models.Model):
place_id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=255, null=True, blank=True)
class Price(models.Model):
class Producto(models.TextChoices):
GASOLINA_REGULAR = 'GR', _('Gasolina regular')
GASOINA_PREMIUM = 'GP', _('Gasolina premium')
DIESEL_REGULAR = 'DR', _('Diesel regular')
DIESEL_PREMIUM = 'DP', _('Diesel premium')
product = models.CharField(max_length=2, choices=Producto.choices)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
price = models.FloatField(null=True, blank=True)
estacion = models.ForeignKey(GasStation,
on_delete=models.SET_NULL,
null=True,
related_name='prices')
Я пробовал:
station.price.filter(product__in=['GR', 'GP', 'DR', 'DP']).latest()
Но он возвращает только последнюю из весь набор запросов, а не последняя цена каждого типа продукта. Я хочу избежать запросов для каждого отдельного продукта, потому что некоторые станции продают не все типы. Любой совет?