【发布时间】:2011-03-24 18:28:57
【问题描述】:
基本上我需要一种优雅的方式来执行以下操作:-
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。在我的情况下,反向查找可能并不总是可行的。
【问题讨论】:
-
抱歉,目前尚不清楚您实际上要做什么。请显示您想要开始和结束的内容。
-
我想说的是,如果我已经可以通过使用 obj1.model2 来引用 Model2 对象,那么最好有办法将这些对象添加到 Model2 对象的 QuerySet 中。
-
我也跟不上你的追求。如果您可以为您的模型发布相关代码并添加一两句话对您的一般描述,我们可能会提供帮助。
-
好吧,我的问题是“是否可以手动将对象添加到 QuerySet?”
-
问题是一个查询集(顾名思义)代表一个数据库查询——在实际进行查询之前和之后(它们是惰性求值的)。您有两个查询 - 因此有两个查询集。虽然你可以伪造一些可能在很多方面表现得像查询集的东西——但在某些极端情况下它可能会失败,因为它不是真正的查询集。您可以创建一个查询来组合您的两个查询并使用它,但尚不清楚这将实现什么。我会重复其他响应者的“为什么”。这有点像过早的优化。