单个查询集过滤器中的3个OR条件

时间:2019-01-20 03:32:56

标签: django django-views

我正试图在单个过滤器中使用3个或3个语句,但是它不起作用。

cart = carts.filter(Q(status='completed') | Q(status='paid') | Q(status='started'))

您知道正确的语法是什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您所拥有的是正确的:

cart = carts.filter(Q(status='completed') | Q(status='paid') | Q(status='started'))

您可以简单地使用in

cart = carts.filter(status__in=['completed', 'paid', 'started'])


当您说时,它不起作用,我想您没有得到任何结果。你应该: *检查数据库中的实际status值和预过滤列表carts中的值:

set(Cart.objects.values_list('status', flat=True))    # full list of statuses
set(carts.values_list('status', flat=True))    # statuses for your pre-filter

还可以考虑使用状态常量(而不是字符串)。