Quelle est façon la plus simple et rejoindre __contains __in?
-
20-09-2019 - |
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!
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
, nontext
) - 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)