我正在使用 django-admin 并且我正在覆盖查询集来过滤我的对象。我想知道是否可以进行 OR 过滤器,即如果 a 为 True 或 b 为 True,则返回对象。
问问题
966 次
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 回答