加入__contains和__in最简单的方法是什么?
问题描述:
我在做标签搜索功能,用户可以观察很多标签,我把它全部放在一个元组中,现在我想查找所有包含列表中至少一个标签的文本。
符号:text__contains__in=('asd','dsa')
我唯一的想法是做循环如:加入__contains和__in最简单的方法是什么?
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
代替,如果你不担心的情况下
+0
不错,如果它会工作,看起来很简单,thx +1和接受答案:) – IProblemFactory 2009-11-17 20:50:34
答
我不知道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)
您能否给一些输入和预期输出的例子吗? – 2009-11-14 01:54:32
立即检查我的编辑。 – IProblemFactory 2009-11-14 12:58:32