2009-11-14 6 views
2

Je fais la fonction de recherche d'étiquette, l'utilisateur pourrait observer beaucoup de balises, je l'obtiens tout dans un tuple, et maintenant je voudrais trouver tout le texte qui inclut au moins une balise de la liste.
symbolique: text__contains__in=('asd','dsa')
Ma seule idée est de faire en boucle, par exemple:Quel est le moyen le plus simple de rejoindre __contains et __in?

q = text.objects.all() 

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

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

+0

Pouvez-vous donner un exemple d'une entrée et la sortie attendue? –

+0

Vérifiez aout ma modification maintenant. – IProblemFactory

Répondre

9

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 (c.-à-Text, non text)
  • Vous pouvez __icontains à la place si vous n'êtes pas inquiet au sujet de l'affaire
+0

Nice si cela va fonctionner, semble simple, thx +1 et accepté la réponse :) – IProblemFactory

0

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) 
Questions connexes