问题
I am doing tag search function, user could observe a lot of tags, I get it all in one tuple, and now I would like to find all text which include at least one tag from the list.
Symbolic: text__contains__in=('asd','dsa')
My only idea is do loop e.g.:
q = text.objects.all()
for t in tag_tuple:
q.filter(data__contains=t)
For example:
input tuple of tags, ('car', 'cat', 'cinema')
output all messages what contains at least one word from that tuple, so My cat is in the car
, cat is not allowed in the cinema
, i will drive my car to the cinema
Thanks for help!
回答1:
Here you go:
filter = Q()
for t in tag_tuple:
filter = filter | Q(data__contains=t)
return text.objects.filter(filter)
A couple of tips:
- You should be naming your model classes with a capital (i.e.
Text
, nottext
) - You may want
__icontains
instead if you're not worried about the case
回答2:
I don't know Django, so I have no idea how to apply this filter, but it seems you want a function like this one:
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)
来源:https://stackoverflow.com/questions/1732680/what-is-simplest-way-join-contains-and-in