Django过滤多个值

时间:2018-07-01 08:30:56

标签: django

谁知道为什么这个query_set不为我返回任何值?单独使用过滤器,效果很好,因此似乎.filter().filter()一起使用是过滤“或”的错误方法。

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

3 个答案:

答案 0 :(得分:1)

像完成操作一样束缚filter,将随后的过滤器应用于上一个过滤器返回的查询集,即它的作用类似于 AND 条件,而不是 OR

您可以使用|运算符组合两个查询:

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

答案 1 :(得分:0)

具有多个参数的

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

答案 2 :(得分:0)

detector = new BarcodeDetector.Builder(ctx) .setBarcodeFormats(Barcode.DATA_MATRIX | Barcode.QR_CODE) .build(); 返回所有带有request.event.tickets.filter(status='on-sale')的对象,并且您正在该列表中查找带有status='on-sale'的对象,这就是为什么要获取空查询集的原因。

如果在status='paused'上可以束缚2个过滤器,那么在同一字段中可以有多个对象,或者如果要链接2个单独的字段,例如。 ManyToManyField,返回所有有售的门票。

解决此问题的最简单方法是在request.event.tickets.filter(status='on-sale').filter(is_available=True)这样的过滤器中使用__in

希望这会有所帮助。 :)