Django过滤多个值

6 python django

有人知道为什么这query_set不会为我返回任何值吗?单独使用过滤器,它工作得很好,所以似乎.filter().filter()一起过滤“非此即彼”是错误的方法。

ticket_query = request.event.tickets.filter(status='on-sale').filter(status='paused').prefetch_related('ticket_tax')
Run Code Online (Sandbox Code Playgroud)

phi*_*hil 15

带有多个参数的 filter() 用 AND 语句将它们连接起来:https : //docs.djangoproject.com/en/2.0/ref/models/querysets/#filter

要在 Django 中执行 OR 查询,您可以使用 Q 对象:

from django.db.models import Q

ticket_query = request.event.tickets.filter(Q(status='on-sale') | Q(status='paused')).prefetch_related('ticket_tax')
Run Code Online (Sandbox Code Playgroud)

更多细节在这里:https : //docs.djangoproject.com/en/2.0/topics/db/queries/#complex-lookups-with-q


Ruh*_*123 5

request.event.tickets.filter(status='on-sale')返回所有带有 的对象status='on-sale',并且您正在该列表中查找带有 的对象status='paused',这就是您得到空查询集的原因。

如果ManyToManyField您可以在同一字段中拥有多个对象,或者如果您要链接 2 个单独的字段,则链接 2 个过滤器就可以了。request.event.tickets.filter(status='on-sale').filter(is_available=True),它返回所有正在销售可用的门票。

解决此问题的最简单方法是__in在过滤器中使用如下所示:ticket_query = request.event.tickets.filter(status__in=['on-sale', 'paused']).prefetch_related('ticket_tax')

希望这可以帮助。:)