Запрос Django, чтобы получить все объявления, чьи наборы ключевых слов содержатся в строке поиска - PullRequest
1 голос
/ 13 сентября 2011

Я пытаюсь внедрить рекламную систему в Джанго. Моя модель для рекламы выглядит следующим образом:

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», я хочу, чтобы все объявления со следующими наборами ключевых слов возвращались: и т. д. - любое объявление, набор ключевых слов которого содержится в строке поиска. Я НЕ хочу, чтобы этот поиск возвращал объявление для "ключевого слова1 ключевое слово2 ключевого слова3 ключевое слово4". Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 13 сентября 2011

Самая простая вещь, о которой я могу подумать, это взять дополнение к вашему списку ключевых слов, то есть, скажем, после обработки пользовательского ввода у вас есть список строк типа ['keyword1', 'keyword2', 'keyword3'] в переменной keywords. Затем вы берете все ключевые слова, которых нет в этом списке:

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

И затем вместо того, чтобы находить объявления, соответствующие вашим разыскиваемым ключевым словам, вы исключаете те, которые соответствуют неправильным:

Ad.objects.exclude(keyword__in=disallowed_keywords)
...