我正在尝试在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”的广告。任何帮助将不胜感激。
答案 0 :(得分:0)
我能想到的最简单的事情就是获取关键字列表的补充 - 也就是说,在处理用户输入后,您在变量['keyword1', 'keyword2', 'keyword3']
中有keywords
字符串列表。然后,您将获取不在该列表中的所有关键字:
disallowed_keywords = Keyword.objects.exclude(keyword_name__in=keywords)
然后,您可以排除那些与错误关键字匹配的广告,而不是找到与您想要的关键字匹配的广告:
Ad.objects.exclude(keyword__in=disallowed_keywords)