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

标签 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 返回了多条记录。

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

最佳答案

您不能使用类似 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。如果例如,请确保更新您的索引。名称更改,则必须更新搜索索引中的所有相应条目。

关于python - 如何通过相关模型过滤 Haystack SearchQuerySets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16683180/

相关文章:

django - 在远程服务器中提供媒体文件,在 django 中的另一台服务器中提供应用程序

python - Django 1.8 ArrayField 追加和扩展

elasticsearch - 无法使用 haystack/elasticsearch 进行部分词搜索

python - Django-Haystack:should_update 似乎没有用 RealtimeSignalProcessor 触发?

python - 使用日期时间作为 x 轴时,如何使 Bokeh 忽略丢失的日期

python - 用户模型的 Django 自定义管理器

python - 索引未显示在数据框中 - 需要显示相应的索引,然后使用 Pandas 根据阈值删除列

python - pip 设置和设置 PYTHONPATH

python - 没有表单的 Django 用户创建

python - 使用Haystack的CircleCI Elasticsearch