Frage

Ich tue Tag Suchfunktion, könnten Benutzer eine Menge von Tags beobachten, ich alles in einem Tupel zu bekommen, und jetzt würde Ich mag alle Texte finden, die mindestens einen Tag aus der Liste enthalten.
Symbolisch: text__contains__in=('asd','dsa')
Meine einzige Idee ist, do-Schleife z.

q = text.objects.all() 

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

Zum Beispiel: Eingangstupel von Tags, ('car', 'cat', 'cinema') mindestens eine Wortausgabe aller Nachrichten, welche von diesem Tupel enthält, so My cat is in the car, cat is not allowed in the cinema, i will drive my car to the cinema Vielen Dank für die Hilfe!

War es hilfreich?

Lösung

Hier gehen Sie:

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

Ein paar Tipps:

  • Sie sollten Ihre Modellklassen mit einem Kapital (das heißt Text, nicht text)
  • werden Namensgebung
  • Sie können wollen __icontains statt, wenn Sie über den Fall nicht besorgt sind

Andere Tipps

Ich weiß Django nicht, so dass ich keine Ahnung, wie diese Filter angewandt werden, aber es scheint, dass Sie eine Funktion wie diese wollen:

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top