Django Queryset как создать такой запрос?
Имеются две таблицы Продукты и История цен Необходимо вывести последнюю цену по дате из таблицы история цен. Это будет работать на Sqlite, но я не могу понять, как это сделать через Queryset
SELECT name,max(date),price,price_discount FROM polls_products
INNER JOIN polls_history_price on polls_history_price.product_id = polls_products.id
GROUP BY polls_products.id
class Products(models.Model):
id = models.IntegerField(primary_key=True, blank=True)
name = models.CharField(max_length=250)
date_create = models.DateTimeField('Event Date')
class HistoryPrice(models.Model):
product = models.ForeignKey(Products, null=True, on_delete=models.PROTECT, related_name='price_list')
date = models.DateTimeField('Event Date')
price = models.FloatField(blank=True,)
price_discount = models.FloatField(blank=False)
Если вы хотите получить QuerySet, вы можете получить объекты только одной модели. Но вы можете легко получить доступ к нужным вам значениям. Чтобы получить последние связанные HistoryPrice объекты (по дате, а не по id), вы можете добавить простую функцию к Products модели:
class Products(models.Model):
...
def get_latest_history_price(self):
return self.price_list.order_by('date').last() # get object
def get_latest_history_price_price(self):
return self.price_list.order_by('date').last().price # get price
Это поможет вам легко получить HistoryPrice объект для текущего Products объекта, вот так:
products = Products.objects.first() # get an object of Products model
price = products.get_latest_history_price() # get the newest related HistoryPrice object
price.price # get price field value of HistoryPrice object
price.price_discount # get price_discount field value of HistoryPrice object