Вопрос

Я использую функцию поиска по тегам, пользователь может наблюдать множество тегов, я получаю все это в одном кортеже, и теперь я хотел бы найти весь текст, который включает хотя бы один тег из списка.
Символический: text__contains__in=('asd','dsa')
Моя единственная идея - сделать цикл, например:

q = text.objects.all() 

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

Например:входной кортеж тегов, ('car', 'cat', 'cinema') выводите все сообщения, содержащие хотя бы одно слово из этого кортежа, так My cat is in the car , cat is not allowed in the cinema, i will drive my car to the cinema Спасибо за помощь!

Это было полезно?

Решение

Держи, ты идешь:

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

Пара советов:

  • Вы должны называть свои классы моделей с большой буквы (т.е. Text, не text)
  • Вы можете захотеть __icontains вместо этого, если вы не беспокоитесь о деле

Другие советы

Я не знаю Django, поэтому понятия не имею, как применить этот фильтр, но, похоже, вам нужна функция, подобная этой:

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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top