如何通过相关模型字段过滤/加入 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/