django url参数作为表单默认值

时间:2016-10-17 15:35:04

标签: django

我有一个搜索表单

class PostSearchForm(forms.Form):
    keyword = forms.CharField(label=_('Search'))
    def __init__(self,*args,**kwargs):
        self.request = kwargs.pop('request', None)
        super(PostSearchForm,self).__init__(*args,**kwargs)
        raise Exception(self.request)    # This returns none
        categories = Category.objects.filter(status=True)
        self.fields['categories'] = forms.ModelChoiceField(queryset=categories, widget=forms.SelectMultiple(attrs={'class': 'some-class'}))

每当进行搜索时,我都会构建一个默认值为其搜索内容的表单,所以我尝试的是在表单init中获取url参数并设置值但是返回无由于一些错误。谁能告诉我哪里错了

更新问题

views.py

def get(self,request,category,*args,**kwargs):
    search_form = PostSearchForm()
    return render(request,self.template_name,{'search_form':search_form})

模板

<form method="get" action="." id="searchForm">
{{ search_form.keyword }}     # When searched then the value should be searched term
{{ search_form.categories }}
</form>

网址

http://example.com/?keyword=test

在表单中,我需要将测试显示为值

1 个答案:

答案 0 :(得分:1)

除非你把它传递给对象,否则什么都不能进入。如果您想要对象中的请求,请传递它:

search_form = PostSearchForm(request=request)

然而,这对任何方式都无法帮助你而且我对你认为它的原因感到困惑。如果您想传递表单的初始数据,请执行以下操作:

search_form = PostSearchForm(initial={'categories': categories, 'keyword': keyword})