Django:选择对象包含所有关键字

时间:2018-10-19 15:04:51

标签: python sql django

这是数据库的样子:

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'(在我看来),这不是我想要的(显然没有结果)。那么有什么解决方案可以解决这个问题吗?谢谢。

1 个答案:

答案 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')

因此,您将在帖子中选择许多标签