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)]

Вернуться на верх