Dan*_*iel 2 django django-forms
我的页面上有一个简单的搜索表单/.
class SearchForm(Form):
query = CharField(max_length=256,
label="Search",
required=False,
widget=TextInput(attrs={'placeholder': 'Search …',
'class': 'form-control'}))
page = IntegerField(min_value=8, initial=1, widget=HiddenInput())
sort = CharField(max_length=16, initial="id", widget=HiddenInput())
order = CharField(max_length=4, initial="asc", widget=HiddenInput())
Run Code Online (Sandbox Code Playgroud)
我的(简化)视图是这样的:
def search(request):
search_form = SearchForm(request.GET)
return render(request, "search.html", {'search_form': search_form})
Run Code Online (Sandbox Code Playgroud)
我的目标是search_form.cleaned_data['<FIELD>']返回我在课堂上设置的初始值SearchForm,而不必检查它们是否存在None或是空的''.
不幸的是我的代码不起作用,因为输入元素是这样渲染的:
<input id="id_page" name="page" type="hidden" />
<input id="id_sort" maxlength="16" name="sort" type="hidden" />
<input id="id_order" maxlength="4" name="order" type="hidden" />
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
代码不起作用的原因是因为
search_form = SearchForm(request.GET)
Run Code Online (Sandbox Code Playgroud)
创建绑定表单.绑定表单没有初始值.
我最终得到了这个宝石.它检查是否request.GET包含至少一个表单的字段(例如,无论值如何/?page=),然后创建一个可以进行验证的绑定表单.否则,用户访问/或提交了与表格无关的其他参数(例如/?foo=bar).
if request.GET & SearchForm.base_fields.keys():
search_form = SearchForm(request.GET)
else:
...
search_form = SearchForm(initial={...})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2073 次 |
| 最近记录: |