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!

¿Fue útil?

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, no text)
  • 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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top