在 Django ORM 中,如何创建一个始终为 False 的 Q 对象?
这类似于关于的问题始终为 True Q 对象 https://stackoverflow.com/q/33517468/247696,但反之亦然。
请注意,这不起作用:
Foobar.objects.filter(~Q()) # returns a queryset which gives all objects
为什么我需要一个 Q 对象而不是简单的 False 值?这样我就可以将它与其他 Q 值结合起来,例如:
condition = always_true_q_object
if something_or_other:
condition = condition | foobar_that_returns_a_q_object()
if something_or_other2:
condition = condition | foobar_that_returns_a_q_object2()
注意:Sam 的答案更好。我把这个答案留在这里而不是删除它,这样你就可以看到山姆提到的“更黑客”的答案
原答案:
关于什么:
Q(pk__isnull=True)
or
Q(pk=None)
这看起来很老套,但似乎有效。例如:
>>> FooBar.objects.filter(Q(x=10)|Q(pk__isnull=True))
[<FooBar: FooBar object>, ...]
>>> FooBar.objects.filter(Q(x=10)&Q(pk__isnull=True))
[]
但是,请注意,当与空值进行“或”运算时,它不会像您预期的那样工作。Q()
.
>>> FooBar.objects.filter(Q()|Q(pk__isnull=True))
[]
解决这个问题的方法可能是使用Q(pk__isnull=False)
作为“永远真实的Q”。
>>> FooBar.objects.filter(Q(pk__isnull=False)|Q(pk__isnull=True))
[<FooBar: FooBar object>, ...]
>>> FooBar.objects.filter(Q(pk__isnull=False)&Q(pk__isnull=True))
[]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)