[英]How to filter Haystack SearchQuerySets by related models
如何通過相關模型字段過濾/加入Haystack SearchQuerySet?
我有一個查詢,如:
sqs = SearchQuerySet().models(models.Person)
返回的結果與等效管理頁面返回的結果相同。
但是,如果我嘗試通過外鍵鏈接的模型記錄進行過濾:
sqs = sqs.filter(workplace__role__name='teacher')
即使頁面/admin/myapp/person/?workplace__role__name=teacher
返回多個記錄,它也不會返回任何內容。
我不想對這些相關模型進行任何全文搜索。 我只想做一個簡單的完全匹配過濾器。 干草堆有可能嗎?
您無法使用干草堆支持的搜索引擎執行聯接。 要進行這樣的查詢,您需要在搜索索引中以“非規范化”的方式添加要過濾的信息:
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
。 只需確保例如更新索引即可。 名稱更改后,您必須更新搜索索引中的所有相應條目。
您也可以這樣做:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.