有人知道为什么这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
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')
。
希望这可以帮助。:)
归档时间: |
|
查看次数: |
18324 次 |
最近记录: |