2

わいせつな質問(私はDjangoを初めて使用します)で申し訳ありませんが、Django、Haystack with Solrを使用して、1つのフィールドからのみデータを取得するにはどうすればよいか疑問に思いました。例:

私は2つのモデルを持っています:

class Category(models.Model):
  name = models.CharField("Category name", max_length=255)

class Post(models.Model):
  title = models.CharField("Post title", max_length=255)
  category = models.ManyToManyField(Category, related_name="category")

私は次のようにPostモデルにインデックスを付けました:

class PostIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    title = EdgeNgramField(model_attr='title')
    category = FacetMultiValueField()

    def get_model(self):
        return Post

    def prepare_category(self, obj):
        return obj.category.all()

    def index_queryset(self):
        return self.get_model().objects.all()

site.register(Post, PostIndex)

ここに質問があります:Haystackを使用してCategoryフィールドのみを取得するにはどうすればよいですか。カテゴリをカウント付きのファセットとして表示したいのですが、以下を使用しません。

url(r'^search/$', FacetedSearchView(form_class=FacetedSearchForm, searchqueryset=sqs), name='haystack_search'),

私のurl.pyで。私は自分のビューを使用して検索を行っています。よろしくお願いします!



私が使用しているもの:

  • Django 1.4
  • ヘイスタック1.2.7
  • Solr 3.6.1
4

2 に答える 2

1

次のことを試すことができます。

from haystack.query import SearchQuerySet

categories = Category.objects.all()
sqs = SearchQuerySet()

facets = {}
for category in categories:
    facets.update(sqs.facet(category.name).facet_counts()['fields'])

テンプレートを繰り返し処理しfacetsて、テンプレート内の値とカウントを表示できます。

于 2012-09-19T18:34:17.730 に答える
0

これが私がこれを修正した方法です-私はThierryLamsコードを使用しましたが、少し変更しました:

from haystack.query import SearchQuerySet
from myapp.models import Category

categories = Category.objects.all()
sqs = SearchQuerySet()

facets = {}
for category in categories:
    facets.update(sqs.facet('category').facet_counts())

次に、辞書であるファセット変数を読み取るために、テンプレートでこれを実行しました(新しい変数カテゴリは実際にはファセット辞書です):http ://tny.cz/40a7bf82

于 2012-09-24T11:41:53.853 に答える