我有一个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实例:
答案 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)