Django - 如何将 QuerySet 转换为 Q 对象?
Posted
技术标签:
【中文标题】Django - 如何将 QuerySet 转换为 Q 对象?【英文标题】:Django - How to transform a QuerySet to a Q object? 【发布时间】:2011-03-14 01:27:59 【问题描述】:有没有办法在 django 中将 QuerySet 转换为 Q 对象?
我的具体动机:我想从另一个 QuerySet (qs_B) 中减去一个 QuerySet (qs_A)。我能想到的唯一方法是使用 exclude() 和等效于 qs_A 的 Q 对象。
例子:
def my_function(qs_A, qs_B):
# Here I need to transform qs_A to a Q object q_obj_A
qs_new = qs.exclude(q_obj_A)
return qs_new
【问题讨论】:
【参考方案1】:您不需要 Q 对象。只需排除第二个查询集:
qs = qs_a.exclude(id__in=qs_B)
【讨论】:
这很简单并且可以工作,但我怀疑至少在许多情况下,它的效率较低且数据库密集度更高,至少在许多情况下,比实际拥有一个表示简单条件的 Q 对象。 过早的优化是万恶之源。或者至少,不好。 @Matthew - 你的意思是说 django 是一个不成熟的 web 框架?!或者你的意思是我的项目还为时过早?! @Daniel - 我想你的答案是否定的,没有办法将 QuerySet 转换为 Q 对象。您能否确认一下,以便我接受这个答案? 我不知道。它们是根本不同的东西。以上是关于Django - 如何将 QuerySet 转换为 Q 对象?的主要内容,如果未能解决你的问题,请参考以下文章