gpt4 book ai didi

django - 总是 False Q 对象

转载 作者:行者123 更新时间:2023-12-04 01:28:58 26 4
gpt4 key购买 nike

在 Django ORM 中,如何创建一个始终为 False 的 Q 对象?

这类似于关于always True Q objects的问题。 ,但反过来。

请注意,这不起作用:

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)

或者
Q(pk=None)

它看起来很hacky,但它似乎有效。例如:
>>> FooBar.objects.filter(Q(x=10)|Q(pk__isnull=True))
[<FooBar: FooBar object>, ...]
>>> FooBar.objects.filter(Q(x=10)&Q(pk__isnull=True))
[]

但是,请注意,当与空 Q() 进行 OR 运算时,它不会像您预期的那样工作。 .
>>> 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))
[]

关于django - 总是 False Q 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35893867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com