django url参数作为表单默认值
我有一张搜索表django url参数作为表单默认值,django,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) r
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>
在形式中,我需要将test显示为value除非您将其传递到对象中,否则任何东西都无法进入对象。如果要在对象中发送请求,请传递它:
search_form = PostSearchForm(request=request)
然而,这对你毫无帮助,我不明白你为什么会这么想。如果要传递表单的初始数据,请执行以下操作:
search_form = PostSearchForm(initial={'categories': categories, 'keyword': keyword})
也许你应该显示一下你在哪里使用表单。你真的在传递请求吗?(虽然我看不出你为什么需要它;你没有使用它,而且你想做的事情就是把
首字母
传进去。)@DanielRoseman更新了问题,请检查一下。我不明白你希望这个怎么做。您显然没有将请求传递给表单,那么它应该如何进入该方法?@DanielRoseman那么我如何将请求传递给表单呢form@DanielRoseman用URL更新了问题,希望能让问题更清楚
search_form = PostSearchForm(initial={'categories': categories, 'keyword': keyword})