Django 过滤器,数组中的许多查询
Django filter, many queries in array
需要一个数组,其中添加了 Q() 对象
具有多个值的过滤器
Anime.objects.filter(Q(question__startswith='Who') & Q(question__startswith='What'))
但需要这样的东西
val_arr = []
val_arr.append(Q(question__startswith='Who'))
val_arr.append(Q(question__startswith='What'))
Anime.objects.filter(val_arr)
你可以像这样用字典来做:
filters = Q()
val_arr = dict()
val_arr.update({"question__startswith": 'Who'))
val_arr.update({"question__startswith": 'What'))
for item in val_arr:
filters |= Q(**{item:val_arr[item]})
Anime.objects.filter(filters)
而不是 &
(AND) 操作,使用 |
(OR) 将解决您的问题
所以改变
Anime.objects.filter(
Q(question__startswith='Who') & Q(question__startswith='What')
)
到
Anime.objects.filter(
Q(question__startswith='Who') | Q(question__startswith='What')
)
调查著名的 django-filters 软件包。它可能已经完成了您想要的一切,允许用户在视图中构建自己的复杂查询。
可以使用 |
或运算符
对您的问题进行编码
q = val_arr[0]
for val in val_arr[1:] :
q = q | val
Anime.objects.filter( q)
您需要|
将您的Q对象放在一起。同一个问题不能同时以 'Who' 和 'What' 开头。 qs.filter(field1=val1, field2=val2)
是与逻辑,你也可以通过 Q(field1=val1)&Q(field2=val2)
需要一个数组,其中添加了 Q() 对象 具有多个值的过滤器
Anime.objects.filter(Q(question__startswith='Who') & Q(question__startswith='What'))
但需要这样的东西
val_arr = []
val_arr.append(Q(question__startswith='Who'))
val_arr.append(Q(question__startswith='What'))
Anime.objects.filter(val_arr)
你可以像这样用字典来做:
filters = Q()
val_arr = dict()
val_arr.update({"question__startswith": 'Who'))
val_arr.update({"question__startswith": 'What'))
for item in val_arr:
filters |= Q(**{item:val_arr[item]})
Anime.objects.filter(filters)
而不是 &
(AND) 操作,使用 |
(OR) 将解决您的问题
所以改变
Anime.objects.filter(
Q(question__startswith='Who') & Q(question__startswith='What')
)
到
Anime.objects.filter(
Q(question__startswith='Who') | Q(question__startswith='What')
)
调查著名的 django-filters 软件包。它可能已经完成了您想要的一切,允许用户在视图中构建自己的复杂查询。
可以使用 |
或运算符
q = val_arr[0]
for val in val_arr[1:] :
q = q | val
Anime.objects.filter( q)
您需要|
将您的Q对象放在一起。同一个问题不能同时以 'Who' 和 'What' 开头。 qs.filter(field1=val1, field2=val2)
是与逻辑,你也可以通过 Q(field1=val1)&Q(field2=val2)