Quiero poder enumerar los elementos que un usuario ha agregado (están listados como el creador) o que el elemento ha sido aprobado.
Entonces básicamente necesito seleccionar:
item.creator = owner or item.moderated = False
¿Cómo haría esto en Django? (preferiblemente con un filtro o conjunto de consultas).

for f in filters: Item.objects.filter(Q(creator=f1) | Q(creator=f2) | ...)reduce(lambda q, f: q | Q(creator=f), filters, Q())crear el objeto Q grande.Item.objects.filter(creator__in=creators), por ejemplo.|proviene el uso como operador OR, en realidad es el operador de unión establecida. También se usa (no aquí) como bit a bit O: stackoverflow.com/questions/5988665/pipe-character-in-pythonPuedes usar el | operador para combinar conjuntos de consultas directamente sin necesidad de objetos Q:
(editar: inicialmente no estaba seguro de si esto causaba una consulta adicional, pero @spookylukey señaló que la evaluación de conjunto de consultas perezoso se encarga de eso)
fuente
Vale la pena señalar que es posible agregar expresiones Q.
Por ejemplo:
Esto termina con una consulta como:
De esta manera no hay necesidad de tratar o operadores, reducir de etc.
fuente
query |= Q(email='[email protected]')?Si desea hacer que el filtro sea dinámico, debe usar Lambda como
reduce(lambda x, y: x | y, [Q(brand=item) for item in brands])es equivalente afuente
from functools import reduceantemano.operator.or_lugar delambda x, y: x | y?Similar a la answera anterior, pero un poco más simple, sin la lambda:
Para filtrar estas dos condiciones usando
OR:Para obtener el mismo resultado mediante programación:
(dividido en dos líneas aquí, para mayor claridad)
operatorestá en la biblioteca estándar:import operatordesde docstring:
Para Python3,
reduceya no está integrado, pero todavía está en la biblioteca estándar:from functools import reducePD
No olvides asegurarte de
list_of_Qque no esté vacío:reduce()se ahogará en la lista vacía, necesita al menos un elemento.fuente
Esto podría ser útil https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships
Básicamente parece que actúan como OR
fuente