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>
)
这将产生 QuerySet
的 ShopItem
至少被订购一次,并且 quantity
的 SelectedProduct
数量 order
和 ShopItem
.
我一直在跟踪这个错误,直到找到我认为它来自的来源,而我现在一直被困在这里。 我有以下型号:
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>
)
这将产生 QuerySet
的 ShopItem
至少被订购一次,并且 quantity
的 SelectedProduct
数量 order
和 ShopItem
.