基本上我需要一种优雅的方式来执行以下操作:-
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2_qs = QuerySet(model=Model2, qs_items=[obj1.model2,obj2.model2])
我的想法可能不对,但做类似以下的事情对我来说似乎非常愚蠢。:-
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
model2_qs = Model2.objects.filter(pk=obj1.model2.pk)
是的,我最终需要一个 Model2 的查询集以供以后使用(特别是传递到 Django 表单)。
在上面的第一个代码块中,即使我使用filter
代替get
显然我会有一个 Model1 的查询集。在我的情况下,反向查找可能并不总是可行。
如果您只是想创建一个项目的查询集,您可以通过一些无法用 SQL 表示的复杂过程来选择这些项目,那么您始终可以使用__in
操作员。
wanted_items = set()
for item in model1.objects.all():
if check_want_item(item):
wanted_items.add(item.pk)
return model1.objects.filter(pk__in = wanted_items)
显然,您必须根据您的情况进行调整,但它至少应该为您提供一个起点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)