¿Qué es la forma más sencilla y unirse __contains __in?
-
20-09-2019 - |
Pregunta
Me estoy haciendo la función de búsqueda de etiquetas, el usuario puede observar una gran cantidad de etiquetas, lo entiendo todo en una tupla, y ahora me gustaría encontrar todos los textos que incluyen al menos una etiqueta de la lista.
simbólico: text__contains__in=('asd','dsa')
Mi única idea es hacer por ejemplo en bucle:.
q = text.objects.all()
for t in tag_tuple:
q.filter(data__contains=t)
Por ejemplo:
tupla de etiquetas de entrada, ('car', 'cat', 'cinema')
salida de todos los mensajes que contiene al menos una palabra de esa tupla, por lo My cat is in the car
, cat is not allowed in the cinema
, i will drive my car to the cinema
Gracias por la ayuda!
Solución
Aquí van:
filter = Q()
for t in tag_tuple:
filter = filter | Q(data__contains=t)
return text.objects.filter(filter)
Un par de consejos:
- Debe estar nombrando las clases del modelo con un capital (es decir
Text
, notext
) - Usted puede querer
__icontains
lugar si no está preocupado por el caso
Otros consejos
No sé Django, así que no tengo idea de cómo aplicar este filtro, pero parece que desea una función como ésta:
def contains_one_of(tags, text):
text = text.split() # tags should match complete words, not partial words
return any(t in text for t in tags)