嗨(抱歉我的英语不好:p)
想象一下这些模型:
class Fruit(models.Model):
# ...
class Basket(models.Model):
fruits = models.ManyToManyField(Fruit)
现在我想检索与所有水果相关的Basket实例。 问题是下面的代码返回与任何水果相关的篮子实例:
baskets = Basket.objects.filter(fruits__in=Fruit.objects.all())
# This doesn't work:
baskets = Basket.objects.filter(fruits=Fruit.objects.all())
任何解决方案都可以解决此问题吗?
非常感谢你。 :)
答案 0 :(得分:6)
我没有方便的数据集来测试它,但我认为它应该可行:
Basket.objects.annotate(num_fruits=Count('fruits')).filter(num_fruits=len(Fruit.objects.all()))
它用相关水果的数量来注释每个篮子对象,并筛选出那些果实数量等于水果总数的篮子。
注意:你需要使用Django 1.1才能工作。