Django Admin Queryset Filter OR

时间:2013-06-06 23:39:27

标签: django django-admin django-queryset

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

1 个答案:

答案 0 :(得分: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 - 对于一个简单的布尔值来说不是问题,但是如果你有一个可以为空的数字字段并且试图否定比较或者它可能会咬你范围。