假设我有两个Django型号,让我们说产品和制造商,并希望找到没有产品的制造商。
class Product(Model):
name = models.CharField()
manufacturer = models.ForeignKey(Manufacturer)
class Manufacturer(Model):
name = models.CharField()
我想生成一组所有未被任何产品对象引用的制造商对象。我可以想出很多方法来获得这个设置,但它们似乎都不干净或 Pythonic
例如,我可以简单地过滤至少有一种产品满足条件的制造商:
models.Manufacturer.objects.filter(product__name=x)
我希望能够过滤更像
的内容models.Manufacturer.objects.exclude(product__exists)
我可能会对产品的某些公理/重言式排除/过滤制造商,但这似乎也不是Pythonic。
答案 0 :(得分:1)
这可以使用annotation和过滤器来完成:
from django.db.models import Count
idle = Manufacturers.objects.annotate(num_products=Count('product')).filter(num_products=0)
idle
将包含没有产品的制造商列表,但请记住,他们还会有一个属性num_products
,由于查询将为0。