簡體   English   中英

Haystack SearchQuerySet不會在具有一個字符的CharField上進行過濾(Whoosh / django-haystack)

[英]Haystack SearchQuerySet won't filter on a CharField with one character (Whoosh / django-haystack)

我正在使用Django 1.5.1和django-haystack 2.1.0以及飛快移動的2.5.2后端:

models.py:

GENDER_CHOICES = (
    (u'M', u'Male'),
    (u'F', u'Female'),
)

class Applicant(models.Model):

    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    first_name = models.CharField(max_length=64)
    last_name = models.CharField(max_length=64)

search_indexes.py:

class ApplicantIndex(indexes.SearchIndex, indexes.Indexable):

    text = indexes.CharField(document=True,use_template=True)
    gender = indexes.CharField(model_attr="gender")

搜索模板

{{ object.first_name }}
{{ object.last_name }}

在django shell我正在嘗試以下:

>>> from haystack.query import SearchQuerySet

>>> sqs=SearchQuerySet()
>>> sqs
[<SearchResult: tooldb.applicant (pk=u'1')>, <SearchResult: tooldb.applicant (pk=u'2')>]

>>> sqs[0].gender
u'M'     #<-- So this seems to be indexed

#but when i try:
>>> sqs.filter(gender='M')
[]     #<-- I get nothing ... ?

我嘗試了其他CharFields沒有選擇和max_lenght> 1,沒有任何問題,像它應該干草堆過濾器。

我錯過了什么?

好吧,我想我明白了..

這似乎是在用嗖單個字符查詢不起作用組合大海撈針。
這有點令人討厭,因為SearchQuerySet應該以Django的QuerySet的工作方式實現。 https://django-haystack.readthedocs.org/en/v2.1.0/searchqueryset_api.html#why-follow-queryset

QuerySet的過濾方法適用於一個字符作為查詢,SearchQuerySet只返回任何內容。

這應記錄在某個地方......

這是我的解決方案:

class ApplicantIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    gender = indexes.CharField()

    def prepare_gender(self, obj):
        return obj.gender*3

現在您可以過濾:

sqs.filter(gender='MMM')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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