首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >干草堆改变SearchQuerySet of SearchForm

干草堆改变SearchQuerySet of SearchForm
EN

Stack Overflow用户
提问于 2014-05-29 10:47:51
回答 1查看 772关注 0票数 0

我希望自定义搜索表单的SearchQuerySet,以搜索所有可能的结果,比如sql表达式" like ",文档中这样写道:

SearchForm最基本的表单类型,这个表单包含一个字段,Q字段(用于查询)。在搜索时,表单将获取Q字段的清理内容,并在您提供的自定义SearchQuerySet或关闭默认SearchQuerySet上执行一个SearchQuerySet。 要自定义表单将使用的SearchQuerySet,请将一个searchqueryset参数传递给构造函数,其中包含您想要使用的SearchQuerySet。如果将此表单与SearchView结合使用,该表单将收到您向视图提供的任何SearchQuerySet,而不需要额外的工作。

是否可以将auto_query更改为图标搜索?

那是我的课,我要修改的地方是:

代码语言:javascript
复制
class ContactSearchForm(HighlightedModelSearchForm):
    name = forms.CharField(max_length=100,required=False)
    surname = forms.CharField(max_length=100,required=False)
    work = forms.CharField(max_length=100,required=False)
    province =  forms.CharField(max_length=100,required=False)
    status = forms.CharField(max_length=100,required=False)
    sex =  forms.CharField(max_length=100,required=False)
    city =  forms.CharField(max_length=100,required=False)
    street =  forms.CharField(max_length=100,required=False)
    zip =  forms.CharField(max_length=100,required=False)


    def no_query_found(self):
        return self.searchqueryset

    def search(self):
        sqs = super(ContactSearchForm,self).search()

        if not self.is_valid():
            return self.no_query_found()

        if self.cleaned_data['name']:
            sqs = sqs.filter(content__icontains = self.cleaned_data["name"])
        if self.cleaned_data['surname']:
            sqs = sqs.filter(content__icontains = self.cleaned_data['surname'])
        if self.cleaned_data['work']:
            sqs = sqs.filter(content__icontains = self.cleaned_data['work'])
        if self.cleaned_data['province']:
             sqs = sqs.filter(content__icontains = self.cleaned_data['province'])
        if self.cleaned_data['status']:
             sqs = sqs.filter(content__icontains = self.cleaned_data['status'])
        if self.cleaned_data['sex']:
             sqs = sqs.filter(content__icontains = self.cleaned_data['sex'])
        if self.cleaned_data['city']:
            sqs = sqs.filter(content__icontains = self.cleaned_data['city'])
        if self.cleaned_data['street']:
            sqs = sqs.filter(content__icontains = self.cleaned_data['street'])
        if self.cleaned_data['zip']:
            sqs = sqs.filter(content__icontains = self.cleaned_data['zip'])

        return sqs
EN

回答 1

Stack Overflow用户

发布于 2014-05-29 11:43:19

问题是您正在调用已执行auto_query的父类搜索方法。你不需要这么做

代码语言:javascript
复制
sqs = super(ContactSearchForm,self).search()

相反,这应该是您的搜索方法:

代码语言:javascript
复制
def search(self):
    if not self.is_valid():
        return self.no_query_found()

    sqs = self.searchqueryset
    for key, value in self.cleaned_data.items():
        if value:
            sqs = sqs.filter(content__icontains=value)

    if self.load_all:
        sqs = sqs.load_all()

    return sqs
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23931566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档