如何从与另一个模型中的特定对象集相关的(ManyToMany)Django模型中过滤对象?

时间:2011-12-05 12:49:25

标签: django django-models

我有一个Django模型(ModelA),ManyToManyField链接到另一个模型(ModelB)。

我想编写一个查询,选择与模型B中特定集合实例相关的所有模型A实例。

我有点喜欢这样做:

related_set = ModelB.objects.filter(id__in=(1,2))
ModelA.objects.filter(modelb_set=related_set)

但这似乎选择了与模型B中的实例1 2相关的模型A实例。

我想选择以下模型A实例:

  1. 与模型B实例1 2;
  2. 相关
  3. 与任何其他模型B实例无关。

1 个答案:

答案 0 :(得分:1)

some help from DrTyrsa之后,我想我已经得到了它:

model_b_1 = ModelB.objects.get(id=1)
model_b_2 = ModelB.objects.get(id=2)
model_b_other = ModelB.objects.exclude(id__in(1, 2))

# Select Model A instances that are related to Model B instances 1 AND 2:
related_to_1_and_2 = ModelA.objects.filter(modelb=model_b_1).filter(modelb=model_b_2)

# Then exclude Model A instances that are related to any other Model B instances
ONLY_related_to_1_and_2 = related_to_1_and_2.exclude(modelb__in=model_b_other)