Django查询以获取搜索字符串包含其关键字集的所有广告

时间:2011-09-13 19:03:21

标签: django search django-models many-to-many django-queryset

我正在尝试在Django中实施广告系统。我的广告模型如下:

class Ad(models.Model):
    ...
    campaign = models.ForeignKey(Campaign)
    keyword = models.ManyToManyField(Keyword)

    def keystring(self):
        keys = self.keyword.all()
        keystring_value = ""
        for key in keys:
            keystring_value = keystring_value + key.keyword_name
        keystring_value = str(keystring_value)
        return (keystring_value)
    ...

此处的相关部分是关键字属性。它与关键字对象的主列表有很多关系。因此,当用户搜索某些关键字集时,请说“keyword1 keyword2 keyword3”,我希望所有包含以下关键字集的广告都返回:“keyword1 keyword2”,“keyword2 keyword3”,“keyword1”,“keyword1 keyword2 keyword3”,等 - 搜索字符串包含关键字集的任何广告。我不希望该搜索返回“keyword1 keyword2 keyword3 keyword4”的广告。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我能想到的最简单的事情就是获取关键字列表的补充 - 也就是说,在处理用户输入后,您在变量['keyword1', 'keyword2', 'keyword3']中有keywords字符串列表。然后,您将获取不在该列表中的所有关键字:

disallowed_keywords = Keyword.objects.exclude(keyword_name__in=keywords)

然后,您可以排除那些与错误关键字匹配的广告,而不是找到与您想要的关键字匹配的广告:

Ad.objects.exclude(keyword__in=disallowed_keywords)