在Django聚合中使用exclude

2024-05-19 00:42:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似的模型:

class Product():
     tags = models.ManyToManyField(Tag)

class Tag():
     slug = models.CharField()

class Transaction():
      product = models.ForeignKey(Product)
      store = models.ForeignKey(Store)

class Store()

我想知道在执行聚合时是否有排除某些行的方法。例如,我想知道有多少交易与我的每个商店相关,但我想计算包含特定标签的产品的交易,但不包括包含另一个标签的交易

例如,假设我有一个可口可乐产品,其标签是“饮料”和“苏打”,我想知道如何计算有“饮料”标签但没有“苏打”标签的产品的交易

我试过这个,但不起作用:

Store.objects.annotate(
    non_soda_transacion_count=Count("transactions", filter=Q(transactions__product__tags__slug="drink") & ~Q(transactions__product__tags__slug="soda")
)

你有什么线索吗

我正在使用Django 2.2.13


Tags: store产品modelstagtags交易标签product

热门问题