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
Вернуться на верх