基本上,我需要一种优雅的方法来执行以下操作:
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的QuerySet结尾,以供以后使用(特别是传递给Django表单)。
在上面的第一个代码块中,即使我使用
filter
而不是get
,我显然也会拥有Model1的QuerySet。在我的情况下,并非总是可以进行反向查找。 最佳答案
如果您只是想创建一个查询集,该查询集是通过一些复杂的过程选择的,而这些过程在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)
显然,您必须对此进行调整,但这至少应该为您提供一个起点。
关于django - 手动创建Django QuerySet或手动将对象添加到QuerySet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3397437/