2011-12-05 83 views
2

我有一个Django模型(ModelA),其中ManyToManyField链接到另一个模型(ModelB)。如何过滤Django模型中的对象(ManyToMany)与另一个模型中特定的一组对象相关?

我想写的是选择那些与实例从模型B

组特定我想那种喜欢做这样的A型的所有实例的查询:

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

,但似乎选择

我想选择A型实例使用有关实例1 2模型B模型的实例是:

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

回答

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) 
+0

是的,愚蠢的错误。 :-)如果你想添加几个条件,你可以使用'reduce'用'filter'方法,或者用[Q objects](https://docs.djangoproject.com/en/dev/topics/db/queries/#复杂的查找与 - q-对象)。我只是使用字典将是最优雅的,但没有运气。 :-)我删除了我的答案。 – DrTyrsa

+0

当然 - 如果它可以采取任意数量的条件,这通常会更有用。非常感谢您的帮助,但它确实指出了我的正确方向。 –

相关问题