Django: 对ManyToManyField的*所有*值进行queryset过滤
你好(抱歉我的英语不好 :p)
想象一下这些模型:
class Fruit(models.Model):
# ...
class Basket(models.Model):
fruits = models.ManyToManyField(Fruit)
现在我想获取与所有水果相关的购物篮实例。问题是下面的代码返回的是与任何水果相关的购物篮实例:
baskets = Basket.objects.filter(fruits__in=Fruit.objects.all())
# This doesn't work:
baskets = Basket.objects.filter(fruits=Fruit.objects.all())
有没有什么解决这个问题的方法呢?
非常感谢你。 :)
1 个回答
6
我手头没有数据集来测试这个,不过我觉得应该可以用:
Basket.objects.annotate(num_fruits=Count('fruits')).filter(num_fruits=len(Fruit.objects.all()))
这个代码会给每个篮子对象加上相关水果的数量,并且过滤掉那些水果数量等于总水果数量的篮子。
注意:你需要使用Django 1.1版本才能让这个工作。