1

Django Haystack v2.0.0 と Whoosh v2.4.0 を使用しています。Haystack のドキュメントによると、検索インデックスはパラメータで Django の関連フィールド ルックアップを使用できmodel_attrます。ただし、manage.py シェル コマンドを使用して次のコードを実行します。

from haystack.query import SearchQuerySet
for r in SearchQuerySet():
    print r.recruitment_agency # Prints True for every job
    print r.recruitment_agency == r.object.employer.recruitment_agency
    # Prints False if r.object.employer.recruitment_agency is False

インデックスの再構築を数回試みましたが、インデックスのディレクトリは書き込み可能で、エラー メッセージは表示されません。他のすべてのフィールドは期待どおりに機能します。

次の(単純化された)モデルがあります:
companys/models.py:

class Company(models.Model):
    recruitment_agency = models.BooleanField(default=False)

ジョブ/models.py:

class Job(models.Model):
    employer = models.ForeignKey(Company, related_name='jobs')

ジョブ/search_indexes.py:

class JobIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    recruitment_agency = indexes.BooleanField(model_attr='employer__recruitment_agency')

    def get_model(self):
        return Job

ジョブ/forms.py:

class JobSearchForm(SearchForm):
    no_recruitment_agencies = forms.BooleanField(label="Hide recruitment agencies", required=False)

    def search(self):
        sqs = super(JobSearchForm, self).search()

        if self.cleaned_data['no_recruitment_agencies']:
            sqs = sqs.filter(recruitment_agency=False)

        return sqs

何が問題なのか誰か知っていますか?

4

1 に答える 1

0

その間、ElasticSearch バックエンドに切り替えましたが、問題は解決しませんでした。これは、Whoosh ではなく干し草スタックの問題である可能性があることを示しています。

問題は、Python の値TrueFalseがブール値として保存されず、文字列として保存され、ブール値に変換されないことです。'true'ブール値でフィルタリングするには、文字列とをチェックする必要があります'false':

class JobSearchForm(SearchForm):
    no_recruitment_agencies = forms.BooleanField(label="Hide recruitment agencies", required=False)

    def search(self):
        sqs = super(JobSearchForm, self).search()

        if self.cleaned_data['no_recruitment_agencies']:
            sqs = sqs.filter(recruitment_agency='false') # Change the filter here

        return sqs
于 2014-06-14T16:45:27.547 に答える