谁知道为什么这个query_set不为我返回任何值?单独使用过滤器,效果很好,因此似乎.filter().filter()
一起使用是过滤“或”的错误方法。
ticket_query = request.event.tickets.filter(status='on-sale').filter(status='paused').prefetch_related('ticket_tax')
答案 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
。
希望这会有所帮助。 :)