Django 注释 运行 查询集在其子项中的不同值的计数

Django annotate count of disctinct values of the running queryset 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

无论如何我可以做到这一点吗?我很感激任何见解!

您应该对 ShopItem 进行注释,因此:

products = ShopItem.objects.filter(
    <strong>selectedproduct__order=order</strong>
).annotate(
    <strong>quantity=Count('selectedproduct')</strong>
)

这将产生 QuerySetShopItem 至少被订购一次,并且 quantitySelectedProduct 数量 orderShopItem.