如何在Django中使用count进行反向关系查询

Dic*_*ful 5 python django django-models

我有如下定义的相关模型。我想编写一个查询来获取所有具有Product_options的产品。我有一种方法可以实现这一目标或如何实现我尝试的解决方案。我已将我的解决方案粘贴在下面。

# 尝试的解决方案

Product.objects.filter(product_options__count__gt=0)
Run Code Online (Sandbox Code Playgroud)

# 定义的模型

class Product(models.Model):
    name = models.CharField(max_length=200)


class ProductOption(models.Model):
    name = models.CharField(max_length=200)
    product = models.ForeignKey(
        Product,
        on_delete=models.PROTECT,
        related_name='product_options'
    )

Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 4

您可以使用.annotate()\xc2\xa0 [Django-doc],然后使用.filter(\xe2\x80\xa6)\xc2\xa0 [Django-doc]

\n
from django.db.models import Count\n\nProduct.objects.annotate(\n    noptions=Count(\'product_options\')\n).filter(\n    noptions__gt=0\n)
Run Code Online (Sandbox Code Playgroud)\n

开始,您还可以使用.alias(\xe2\x80\xa6)\xc2\xa0 [Django-doc]

\n
from django.db.models import Count\n\nProduct.objects.alias(\n    noptions=Count(\'product_options\')\n).filter(\n    noptions__gt=0\n)
Run Code Online (Sandbox Code Playgroud)\n