0

我正在使用 django-admin 并且我正在覆盖查询集来过滤我的对象。我想知道是否可以进行 OR 过滤器,即如果 a 为 True 或 b 为 True,则返回对象。

4

1 回答 1

3

当然,只需使用 Q 对象和 | 将它们结合起来。

class MyAdmin(admin.ModelAdmin):

    def queryset(self, request):
        return super(MyAdmin, self).queryset(request).filter(Q(a=True) | Q(b=True))

https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

因为 (a | b) 在逻辑上等价于 ~(~a & ~b) 你也可以用.exclude:

return super(MyAdmin, self).queryset(request).exclude(a=False, b=False)

哪个更清楚取决于您的实际比较是什么。如果你有可以为空的术语,你必须记住与 null 的比较总是返回 False - 对于简单的布尔值来说不是问题,但如果你有一个可以为空的数字字段并尝试否定比较或范围。

于 2013-06-06T23:45:07.097 回答