2011-01-28 16 views

Respuesta

60
reduce(operator.and_, (Q(first_name__contains=x) for x in ['x', 'y', 'z'])) 
+2

gracias por la respuesta. Todavía no estoy seguro de cómo usar esto ... – neolaser

+9

'User.objects.filter (reduce (...))' Está haciendo el equivalente de 'User.objects.filter (Q (first_name__contains = 'x') & Q (first_name__contains = 'y') & Q (first_name__contains = 'z')) ' –

+0

ok ¡excelente! gracias Ignacio y Yuji – neolaser

18
import operator 
from django.db.models import Q 

q = ['x', 'y', 'z'] 
query = reduce(operator.and_, (Q(first_name__contains = item) for item in ['x', 'y', 'z'])) 
result = User.objects.filter(query) 
+3

Hey :). Bienvenido a SO. ¿Te importa agregar un poco de carne a tu respuesta? Normalmente nos gusta proporcionar un poco más de información que un simple volcado de código para obtener una respuesta, solo para ayudar a otros usuarios a comprender mejor lo que está sucediendo :). Gracias ^^ – Patrice

+10

@Patrice También podría hacer el mismo comentario a la respuesta elegida, por el tipo con 339K rep. Esta respuesta tiene más contexto al menos. :) – bozdoz

+0

si usa Python 3, use 'import functools' y use' functools.reduce'. Ver [esto] (https://stackoverflow.com/a/10226421/1526703) – Anupam

Cuestiones relacionadas