【问题标题】:Django: queryset filter for *all* values from a ManyToManyFieldDjango:来自 ManyToManyField 的 *all* 值的查询集过滤器
【发布时间】:2010-11-30 00:48:04
【问题描述】:

嗨(抱歉我的英语不好:p)

想象一下这些模型:

class Fruit(models.Model):
    # ...

class Basket(models.Model):
    fruits = models.ManyToManyField(Fruit)

现在我想检索与所有个水果相关的 Basket 实例。 问题是下面的代码返回了与 any 水果相关的 Basket 实例:

baskets = Basket.objects.filter(fruits__in=Fruit.objects.all())

# This doesn't work:
baskets = Basket.objects.filter(fruits=Fruit.objects.all())

有什么办法可以解决这个问题吗?

非常感谢。 :)

【问题讨论】:

    标签: python sql django django-models django-queryset


    【解决方案1】:

    我没有方便的数据集来测试这个,但我认为它应该可以工作:

    Basket.objects.annotate(num_fruits=Count('fruits')).filter(num_fruits=len(Fruit.objects.all()))
    

    它用相关水果的数量注释每个篮子对象,并过滤掉那些水果数量等于水果总数的篮子。

    注意:您需要 Django 1.1 才能工作。

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 2016-09-11
      • 2010-10-14
      • 2019-07-29
      • 1970-01-01
      相关资源
      最近更新 更多