1

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

我有一个像这样的查询:

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

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

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

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

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

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

4

2 回答 2

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。如果例如,请确保更新您的索引。名称更改,然后您必须更新搜索索引中的所有相应条目。

于 2013-05-22T10:29:07.757 回答
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

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

于 2015-09-18T21:08:13.840 回答