除非q字段有价值,否则多场干草堆形式不会运行...为什么?

时间:2014-01-09 15:28:38

标签: django-forms django-haystack

我不明白为什么会这样。我的草垛形式有两个字段,q和i_date。如果仅在i_date(例如“1921-05-31”)中输入数据,则会得到0结果。如果您在q和i_date中输入数据,则会得到q和i_date过滤的结果。为什么搜索不能单独使用i_date ????

forms.py:

q= forms.CharField(
    required=False
)

i_date=forms.DateField(
    required=False 
)

def search(self):
    sqs = super(CustomSearchForm, self).search()
    if self.cleaned_data['q']:
        sqs = sqs.filter(content = Clean(query))
    if self.is_valid() and self.cleaned_data['i_date']:
        sqs = sqs.filter(issue_date=self.data['i_date'])
    return sqs

我知道单独的i_date搜索应该返回结果,因为我在shell中运行了以下搜索并得到了结果:

sqs = SearchQuerySet().filter(i_date=('1921-05-31'))

1 个答案:

答案 0 :(得分:0)

好的我确定干草堆不会运行搜索,除非q字段(主要字段)以某种方式定义。为什么我不知道。它必须与内置的SearchForm的工作方式联系在一起。无论如何,为了解决这个问题我在上面的代码中使用了以下调整:

def search(self):
    sqs = super(CustomSearchForm, self).search()
    if self.cleaned_data['q']:
        sqs = sqs.filter(content = Clean(query))
    else:
        sqs = SearchQuerySet()######this line is what fixed the problem

    if self.is_valid() and self.cleaned_data['i_date']:
        sqs = sqs.filter(issue_date=self.data['i_date'])
    return sqs