如何通过相关模型字段过滤/加入Haystack SearchQuerySet?
我有一个类似的查询:
sqs = SearchQuerySet().models(models.Person)
,这将返回与等效管理页面返回的结果相同的结果。
但是,如果我尝试按外键链接的模型记录进行过滤:
sqs = sqs.filter(workplace__role__name='teacher')
它不返回任何内容,即使页面/admin/myapp/person/?workplace__role__name=teacher
返回多条记录。
我不想对这些相关模型进行任何全文搜索。我只想做一个简单的完全匹配过滤器。干草堆有可能吗?
答案 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