Django针对供应所有零件的供应商的查询

Django针对供应所有零件的供应商的查询,django,django-models,Django,Django Models,给定模型(供应商提供零件,多对多关系): 是否可以编写Django查询以获取提供所有零件的供应商?我对生成单个SQL语句的查询感兴趣 例如,使用以下数据: p1 = Part() p2 = Part() p3 = Part() v1 = Vendor(name="supply nothing") v2 = Vendor(name="supply some parts") v3 = Vendor(name="supply all parts") p1.save() p2.save() p3.sa

给定模型(供应商提供零件,多对多关系):

是否可以编写Django查询以获取提供所有零件的供应商?我对生成单个SQL语句的查询感兴趣


例如,使用以下数据:

p1 = Part()
p2 = Part()
p3 = Part()
v1 = Vendor(name="supply nothing")
v2 = Vendor(name="supply some parts")
v3 = Vendor(name="supply all parts")
p1.save()
p2.save()
p3.save()
v1.save()
v2.save()
v3.save()
v2.parts.add(p1,p2)
v3.parts.add(p1,p2,p3)
我想得到:

[<Vendor: supply all parts>]
[]

您可以首先查询所有零件:

parts = Part.objects.all()
然后筛选供应商:

vendors = Vendor.objects.filter(parts=parts)

看看这个:,听起来很合理。@ShangWang谢谢,但这不是一个单独的陈述。实际上我不太确定我找到的答案中的循环部分,因为我认为第一部分就足够了。看看这个:。请尝试一下,看看循环前后有什么不同。
无法将关键字“part_set”解析为字段。选项包括:id、名称、零件
。我明白这个想法,但无论如何,这将产生两个SQL查询,其中包含从数据库服务器到数据库服务器的部件列表。我正在寻找一个单一的SQL语句解决方案。@EgorRogov您使用了一个
相关的\u名称
,这不在您的问题中。我已经编辑了我的答案。现在就试试不,没有相关的名字。顺便说一句,更新后的版本也不起作用(
一个子查询作为表达式返回多行)。@EgorRogov我这里有确切的结构,它正在工作,你的Django版本是什么?模型与描述的完全相同,我为这个问题准备了它们。数据库包含与描述完全相同的数据。没有别的了。
vendors = Vendor.objects.filter(parts=parts)