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 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Django QuerySet 转换为字典列表?

如何将列表转换为queryset django

如何将此 SQL 转换为 Django QuerySet?

在 Django 中将 QuerySet 转换为 JSON

Django:将带有相关对象的 QuerySet 转换为 JSON

如何将 DurationField 的值转换为 QuerySet 中的微秒/分钟数?