【发布时间】:2016-01-26 03:00:08
【问题描述】:
假设我有两个 Django 模型,假设产品和制造商,并希望找到没有产品的制造商。
class Product(Model):
name = models.CharField()
manufacturer = models.ForeignKey(Manufacturer)
class Manufacturer(Model):
name = models.CharField()
我想生成一组所有没有被任何产品对象引用的制造商对象。我可以想出很多方法来获得这个集合,但没有一个看起来很干净或 Pythonic
- 给定所有产品的查询集,生成一组拥有产品的所有制造商。然后将所有制造商的集合差与这里描述的manufacturers_with_products:How to get the difference of two querysets in Django。
- 根据缺少与任何产品的反向关系过滤制造商对象。 Django 可以很容易地根据反向关系的属性进行过滤,但是我找不到一种干净的方法来根据这种反向关系的存在进行过滤。
例如,我可以简单地过滤至少有一个满足条件的产品的制造商:
models.Manufacturer.objects.filter(product__name=x)
我希望能够过滤更多类似的东西
models.Manufacturer.objects.exclude(product__exists)
我可能会根据产品的某些公理/重言式排除/过滤制造商,但这似乎也不是很 Pythonic。
【问题讨论】:
-
对于
ManyToManyField:stackoverflow.com/q/4184558
标签: django