2011-07-24 16 views

答えて

5

SearchIndexフィールドにこの情報を追加しましたか?例えば。

class NoteIndex(SearchIndex, indexes.Indexable): 
    title = CharField(model_attr='title') 
    facet_model_name = CharField(faceted=True) 

    def get_model(self): 
     return Note 

    def prepare_facet_model_name(self, obj): 
     return "note" 


class MemoIndex(SearchIndex, indexes.Indexable): 
    title = CharField(model_attr='title') 
    facet_model_name = CharField(faceted=True) 

    def get_model(self): 
     return Memo 

    def prepare_facet_model_name(self, obj): 
     return "memo" 

このように、検索インデックスごとに異なる文字列を返すだけです。また、mixinを作成し、get_modelによって返されたモデルの名前を返すこともできます。

SearchIndexの定義にこのフィールドを追加したと仮定すると、結果はchain the facet methodになります。

results = form.search().facet('facet_model_name') 

facet_counts方法は、この場合には、各ファセット値の結果の多面的なフィールドとカウントはモデル名を辞書を返します。

Haystackによって追加されたフィールドであるmodel_nameとの競合を回避するため、このフィールドは冗長に表示されています。それは面倒ではなく、重複すると矛盾が生じるかどうかはわかりません。

+0

複数のモデルにファセットを表示するために、これを単一の検索フォームでどのように使用するか説明できますか?たとえば、Notes、Memos、Recordingsを持っている場合、それぞれ独自のIndexを持っている場合、どのようにして1つのFacetedSearchFormでこれらの異なるモデルをファセット表示できますか? –

+0

それぞれ独自のSearchIndex定義を意味しますか? – bennylope

+1

上記の説明の編集がうまくいけばうれしいです。 – bennylope

0

The Docsこれは本当に良いウォークスルーを持っています。

最小あなたは必要があります

  1. はあなたのmodel_namesフィールドののparamsにfaceted=Trueを追加することです。
  2. スキーマとインデックスを再構築します。
  3. .facet('model_names')を検索クエリセットに追加してください。

さらに詳しい解説でより完全な答えが得られます。

0

あなただけのモデルタイプでフィルタリングする場合は、あなたは一例でより多くの、この質問をしてください説明できるModelSearchForm

関連する問題