Como faço para passar uma lista de Qs para filtrar ou pesquisas?

votos
4

Como faço para passar uma lista de Qs para filtrar ou pesquisas? Algo como:

q_list = [Q(xyz__isnull=True), Q(x__startswith='x')]?

Sem uma lista que eu faria:

Model.objects.filter(Q(xyz__isnull=True) | Q(x__startswith='x'))
Publicado 19/03/2009 em 23:44
fonte usuário
Em outras línguas...                            


2 respostas

votos
15

Use python de reduzir a função ():

import operator
reduced_q = reduce(operator.or_, q_list)
Model.objects.filter(reduced_q)
Respondeu 19/03/2009 em 23:47
fonte usuário

votos
7

Q objectos também tem um addmétodo que leva um outro objecto Q e Q um conector (AND ou OR).

q_object = Q(xyz__isnull=True)
q_object.add(Q(x__startswith='x'), Q.OR)

Eu encontrei este para ser útil ao construir ou filtros e eu escrevi um exemplo mais no meu blog: "Adicionar" objetos Q em Django

Respondeu 02/10/2009 em 16:50
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more