¿Cómo puedo pasar una lista de Qs para filtrar las búsquedas por O?
-
21-08-2019 - |
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'))
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