¿Hay alguna manera de tomar una lista de expresiones de consulta de django (por ejemplo, Q(first_name="Jordan")
, donde Q
es django.db.models.Q
) y O BIEN juntas?Lista de Python para operaciones bit a bit
En otras palabras, tengo algo como esto:
search_string = "various search terms"
Y yo quiero hacer esto:
search_params = [Q(description__icontains=term) for term in re.split(r'\W', search_string)]
search_params = something_magical(search_params)
results = Record.objects.filter(search_params)
donde search_params
ahora es equivalente a Q(description__icontains="various") | Q(description__icontains="search" | Q(description__icontains="terms"
Sé que sería ser posible con una función como esta:
def something_magical(lst):
result = lst[0]
for l in lst[1:]
result |= l
return result
Me pregunto si esta funcionalidad ya está incorporada en Python (y supongo que está más optimizada que mi función aquí).
Aunque estoy interesado en esta aplicación, también me interesa teóricamente.
No creo que haya un operador tan django ... ¿Pero podría hacer todas las consultas "o" y luego usar los operadores de conjunto de pitones para combinar los resultados? (http://docs.python.org/library/sets.html#set-objects) –
@RichardGreen que puede crear consultas bastante feas –