Skip to main content
 首页 » 编程设计

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

2025年05月04日20落叶

如何通过相关模型字段过滤/加入 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。如果例如,请确保更新您的索引。名称更改,则必须更新搜索索引中的所有相应条目。