基本上,我需要一种优雅的方法来执行以下操作:

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/

10-13 06:42