Django Annotate Changes Query Values/Order
Я пытаюсь извлечь 8 самых последних товаров из моей модели и прикрепить их минимальную цену. Когда я аннотирую 8 последних товаров, товары меняются, если я не использую order_by(). Является ли это ошибкой, или это как-то повышает эффективность моего запроса? Я пытаюсь лучше понять свои запросы, чтобы сделать их быстрее.
class Item(ClusterableModel):
name = models.CharField(max_length=100)
class Meta:
ordering = ('-pk',)
class StoreInventory(ClusterableModel):
item = ParentalKey('Item', on_delete=models.CASCADE)
price = models.DecimalField(max_digits=4, decimal_places=2)
Нежелательно
newest_items = Item.objects.all()[:8]
> Queryset [Item: Item object(100), ..., Item: Item object(93)]
newest_items = newest_items.annotate(price = Min('storeinventory__price'))
> Queryset [Item: Item object(1), ..., Item: Item object(8)]
Желаемый
newest_items = Item.objects.all().order_by('-pk')[:8]
> Queryset [Item: Item object(100), ..., Item: Item object(93)]
newest_items = newest_items.annotate(price = Min('storeinventory__price'))
> Queryset [Item: Item object(100), ..., Item: Item object(93)]