2011-09-13 7 views
1

Djangoに広告システムを実装しようとしています。広告のモデルは次のとおりです。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) 
    ... 

ここで、関連する部分はキーワード属性です。これは、キーワードオブジェクトのマスターリストとの多対多の関係です。したがって、ユーザーがキーワードセットを検索すると、「キーワード1キーワード2キーワード3」と表示されます。「キーワード1キーワード2」、「キーワード2キーワード3」、「キーワード1」、「キーワード1キーワード2キーワード3」、 etc - 検索文字列にキーワードセットが含まれている広告。その検索で「keyword1 keyword2 keyword3 keyword4」の広告を返すことは望ましくありません。どんな助けでも大歓迎です。

答えて

0

私が考えることができる最も簡単なことは、あなたのキーワードリストの補完を取ることです。すなわち、keywords['keyword1', 'keyword2', 'keyword3']のような文字列のリストがあります。そして、あなたがそのリストに含まれていないすべてのキーワード取る:これは非常た

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

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

とし、代わりにあなたの希望のキーワードに一致する広告を見つけるのを、あなたは間違ったものと一致するものを除外しますほぼ正しい。 disallowed_keywordsフィルタは除外句としてkeyword_name__in = keywordsを取っていませんでした。代わりにpk__in = keywordsを使用しましたが、それは魅力的でした。どうもありがとう!! –

+0

前のコメントを修正する必要があります。回答者が理解していたと仮定したテキスト検索ボックスを使用していた場合、投稿されたソリューションはそのまま動作していました。まだ開発中なので、テキストボックスではなく、検索のためのリストベースのキーワードセレクタを用意しています。そのため、フィルタでpkを変更する必要がありました。だから、答えはそれほど正確ではなかった、それは完全に正しい。再度、感謝します。 –

関連する問題