加入__contains和__in最简单的方法是什么?

时间:2009-11-14 00:07:02

标签: django django-queryset django-orm

我正在做标签搜索功能,用户可以观察很多标签,我把它全部放在一个元组中,现在我想找到包含列表中至少一个标签的所有文本。 符号: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 carcat is not allowed in the cinemai will drive my car to the cinema 谢谢你的帮助!

2 个答案:

答案 0 :(得分:9)

你走了:

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

一些提示:

  • 您应该用大写命名您的模型类(即Text,而不是text
  • 如果您不担心此案,可能需要__icontains

答案 1 :(得分:0)

我不知道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)