这是数据库的样子:
id | Post | tag
1 | Post(1) | 'a'
2 | Post(1) | 'b'
3 | Post(2) | 'a'
4 | Post(3) | 'b'
这是模块的代码
class PostMention(models.Model):
tag = models.CharField(max_length=200)
post = models.ForeignKey(Post,on_delete=models.CASCADE)
这是搜索代码
def findPostTag(tag):
keywords=tag.split(' ')
keyQs = [Q(tag=x) for x in keywords]
keyQ = keyQs.pop()
for i in keyQs:
keyQ &= i
a = PostMention.objects.filter(keyQ).order_by('-id')
if not a:
a=[]
return a
(此代码无法正常工作)
我撤消了标签,并将每个标签保存为一行在数据库中。现在,我要创建一个搜索功能,使用户可以同时输入多个关键字,例如'a b'
,它将返回'Post(1)'。我搜索了一些类似的情况,但似乎都是关于同时在一行中搜索多个关键字的,例如使用Q(tag='a') & Q(tag='b')
,它将搜索等于两个'a '和'b'(在我看来),这不是我想要的(显然没有结果)。那么有什么解决方案可以解决这个问题吗?谢谢。
答案 0 :(得分:0)
django提供的ManyToManyField
是这种情况,您必须使用:
class Tags(models.Model):
tag = models.CharField(unique=True, verbose_name='Tags')
class Post(models.Model): #your model
title = models.CharField(verbosone_name = 'Title')
post_tags = models.ManyToManyField(Tags, verbose_name='Choice your tags')
因此,您将在帖子中选择许多标签