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)