Django 过滤多个值

新手上路,请多包涵

任何人都知道为什么这个 query_set 没有为我返回任何值?单独使用过滤器,它工作得很好,所以看起来 .filter().filter() 在一起是过滤“要么”的错误方法。

 ticket_query = request.event.tickets.filter(status='on-sale').filter(status='paused').prefetch_related('ticket_tax')

原文由 user9252255 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 467
2 个回答

具有多个参数的 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')

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

原文由 phil 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

链接 2 个过滤器很好,如果它是 ManyToManyField ,您可以在同一字段中拥有多个对象,或者如果您链接 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')

希望这可以帮助。 :)

原文由 Ruhi123 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏