Pregunta

¿Cómo pasar una lista de Qs para filtrar las búsquedas por O? Algo así como:

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

Sin una lista que haría:

Model.objects.filter(Q(xyz__isnull=True) | Q(x__startswith='x'))
¿Fue útil?

Solución

El uso del pitón reducir () Función:

import operator
reduced_q = reduce(operator.or_, q_list)
Model.objects.filter(reduced_q)

Otros consejos

objetos Q tienen también un método add que tiene otro objeto Q y un conector Q (AND u OR).

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

He encontrado que esto es muy útil cuando se construye O filtros y he escrito un ejemplo ya en mi blog: "Adición de" objetos Q en Django

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top