【发布时间】:2019-04-27 10:42:19
【问题描述】:
我正在尝试在 django 表单上运行验证,该表单用于检索 ListView 视图中的对象列表。尽管在这里阅读了 django 文档和许多其他问题,但我无法找出这个简单的测试代码有什么问题:
form.html
<form action="list.html" method="get">
{{ form }}
<input type="submit" value="Submit">
</form>
list.html
<ul>
{% for area in object_list %}
<li>{{ area.name }}</li>
{% endfor %}
</ul>
forms.py
from django import forms
class SearchArea(forms.Form):
area = forms.CharField(label='Area code', max_length=6)
def clean_area(self):
area = self.cleaned_data['area'].upper()
if '2' in area:
raise forms.ValidationError("Error!")
return area
views.py
class HomePageView(FormView):
template_name = 'form.html'
form_class = SearchArea
class AreaListView(ListView):
template_name = 'list.html'
model = AreaCentral
def get_queryset(self):
q = self.request.GET.get('area')
return AreaCentral.objects.filter(area__istartswith=q)
当我尝试提交类似“2e”的内容时,我预计会出现验证错误,而是提交了表单。此外,我可以在 GET 参数中看到“area”甚至没有转换为大写(“2E”而不是“2e”)。
【问题讨论】: