Django annotate count of disctinct values of the running quesyset in its children

Я отслеживал эту ошибку некоторое время, пока не нашел источник, из которого, как я полагаю, она исходит, и теперь я застрял здесь. У меня есть следующие модели:

class ShopItem(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    store = models.ForeignKey(to=Store, on_delete=models.CASCADE)
    name = models.CharField(max_length=250)

class SelectedProduct(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name="products", null=True, blank=True)
    product = models.ForeignKey(ShopItem, null=True, blank=True, on_delete=models.SET_NULL)

class Order(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    store = models.ForeignKey(Store, on_delete=models.CASCADE, related_name="orders")
    status = models.PositiveIntegerField(choices=OrderStatus.choices, default=OrderStatus.CART)
    number = models.CharField(max_length=36, blank=True, null=True)

Допустим, например, в заказе 5 товаров, 3 из них одного типа (p1, p2, p3), так как они ссылаются на один и тот же товар; где два других товара (p4, p5) отличаются, так как они ссылаются на разные товары магазина.

Я пытаюсь определить, сколько одинаковых продуктов существует в этом заказе, как в следующем

products = order.products.all().annotate(quantity=Count("product"))

Попытка получить набор этих продуктов с аннотацией количества, единственное, я получаю количество 1 для всех продуктов, где я пытаюсь получить:

p1.quanity
> 3
p2.quanity
> 3
p3.quanity
> 3
p4.quanity
> 1
p5.quanity
> 1

могу ли я добиться этого? Я ценю любые идеи!

Вы должны аннотировать ShopItems, так:

products = ShopItem.objects.filter(
    selectedproduct__order=order
).annotate(
    quantity=Count('selectedproduct')
)

В результате получится QuerySet из ShopItems, которые упорядочены хотя бы один раз, и с quantity количеством SelectedProducts для этого order и этого ShopItem.

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