簡體   English   中英

如何通過相關模型過濾Haystack SearchQuerySets

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM