如何通过相关模型过滤Haystack SearchQuerySets

时间:2013-05-22 03:51:55

标签: python django django-haystack

如何通过相关模型字段过滤/加入Haystack SearchQuerySet?

我有一个类似的查询:

sqs = SearchQuerySet().models(models.Person)

,这将返回与等效管理页面返回的结果相同的结果。

但是,如果我尝试按外键链接的模型记录进行过滤:

sqs = sqs.filter(workplace__role__name='teacher')

它不返回任何内容,即使页面/admin/myapp/person/?workplace__role__name=teacher返回多条记录。

我不想对这些相关模型进行任何全文搜索。我只想做一个简单的完全匹配过滤器。干草堆有可能吗?

2 个答案:

答案 0 :(得分:6)

您无法使用像haystack支持的搜索引擎执行联接。 要进行这样的查询,您需要在搜索索引中以“非规范化”方式添加要过滤的信息:

class ProfileIndex(indexes.SearchIndex, indexes.Indexable):
    # your other fields, most likely model attributes
    role_name = indexes.CharField()

    def get_model(self):
        return Person

    def prepare_role_name(self, person):
        return person.workplace.role_name

然后您可以对字段role_name进行过滤。如果是,请确保更新您的索引。名称更改,然后您必须更新搜索索引中的所有相应条目。

答案 1 :(得分:0)

你也可以这样做:

class ProfileIndex(indexes.SearchIndex, indexes.Indexable):
    # your other fields, most likely model attributes
    role_name = indexes.CharField(model_attr='workplace__role__name')

    def get_model(self):
        return Person

您可以按role_name过滤。 我在这里看到了。 http://django-haystack.readthedocs.org/en/latest/searchindex_api.html