【问题标题】:Django - How to transform a QuerySet to a Q object?Django - 如何将 QuerySet 转换为 Q 对象?
【发布时间】: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

【问题讨论】:

    标签: django django-queryset django-q


    【解决方案1】:

    您不需要 Q 对象。只需排除第二个查询集:

    qs = qs_a.exclude(id__in=qs_B)
    

    【讨论】:

    • 这很简单并且可以工作,但我怀疑至少在许多情况下,它的效率较低且数据库密集度更高,至少在许多情况下,比实际拥有一个表示简单条件的 Q 对象。
    • 过早的优化是万恶之源。或者至少,不好。
    • @Matthew - 你的意思是说 django 是一个不成熟的 web 框架?!或者你的意思是我的项目还为时过早?!
    • @Daniel - 我想你的答案是否定的,没有办法将 QuerySet 转换为 Q 对象。您能否确认一下,以便我接受这个答案?
    • 我不知道。它们是根本不同的东西。
    猜你喜欢
    • 2021-11-22
    • 2012-03-31
    • 2013-09-07
    • 2011-05-24
    • 2012-03-08
    • 2013-08-11
    • 1970-01-01
    • 2017-09-17
    • 2012-07-26
    相关资源
    最近更新 更多