2016-10-17 14 views
0

我有一个搜索表单Django的URL参数的形式默认值

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'})) 

只要搜索由我有一个生成与默认值的形式,因为他们已经搜查了什么,所以我试过的就是让URL参数在表单init中设置值,但由于某种错误返回无,因此它是。任何一个可以告诉我,我错了

更新问题

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> 

URL

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

在我需要显示测试作为价值

+0

也许您应该显示您使用表单的位置。你真的传递了请求吗? (虽然我看不出为什么你需要它,你没有使用它,而你想做的事情的方式是无论如何都要通过'initial'。) –

+0

@DanielRoseman更新的问题请检查 – overflow

+0

我不能了解你如何期待这项工作。你显然不会将请求传递给表单,那么它应该如何进入该方法? –

回答

0

没有任何东西可以进入一个对象,除非你通过它的存在形式。如果你想在你的对象的请求,然后将它传递:

search_form = PostSearchForm(request=request) 

然而,这不会帮助你以任何方式在所有,我很困惑,为什么你认为它会。如果您想要为表单传递初始数据,请执行以下操作:

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