Question

Je suis en train de faire fonction de recherche de l'étiquette, l'utilisateur peut observer beaucoup de balises, je reçois tout en un tuple, et maintenant je voudrais trouver tous les textes qui comprennent au moins une étiquette de la liste.
symbolique: text__contains__in=('asd','dsa')
Ma seule idée est faire en boucle par exemple:.

q = text.objects.all() 

for t in tag_tuple: 
   q.filter(data__contains=t)

Par exemple: entrée tuple des balises, ('car', 'cat', 'cinema') sortie tous les messages qui contiennent au moins un mot de ce tuple, donc My cat is in the car, cat is not allowed in the cinema, i will drive my car to the cinema Merci pour l'aide!

Était-ce utile?

La solution

vous allez ici:

filter = Q()
for t in tag_tuple: 
   filter = filter | Q(data__contains=t)
return text.objects.filter(filter)

Quelques conseils:

  • Vous devez nommer vos classes de modèle avec un capital (à savoir Text, non text)
  • Vous voudrez peut-être __icontains au lieu si vous n'êtes pas inquiet de l'affaire

Autres conseils

Je ne sais pas Django, donc je ne sais pas comment appliquer ce filtre, mais il semble que vous voulez une fonction comme celle-ci:

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top