python - 坚持使用 django 表单验证
问题描述
我正在尝试在用于检索 ListView 视图中的对象列表的 django 表单上运行验证。尽管在这里阅读了 django 文档和许多其他问题,但我无法在这个简单的测试代码中找出问题所在:
表单.html
<form action="list.html" method="get">
{{ form }}
<input type="submit" value="Submit">
</form>
列表.html
<ul>
{% for area in object_list %}
<li>{{ area.name }}</li>
{% endfor %}
</ul>
表格.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
视图.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 参数中看到“区域”甚至没有转换为大写字母(“2E”而不是“2e”)。
解决方案
默认的 FormView 只会在 POST 上处理表单;GET 用于最初显示空表单。所以你需要method="post"
在你的模板表单元素中使用。
您的action
属性也值得怀疑;它需要指向表单视图的 URL。如果这实际上是 URL,请注意在 Django URL 中使用“.html”之类的扩展名是不常见的,我建议不要这样做。
推荐阅读
- javascript - Selenium 无法在带有切换框架的 IE 中找到元素
- r - 在 R Markdown PDF 输出中更改绘图图表大小的输出宽度
- javascript - javascript location.href 从一个视图重定向到另一个视图
- performance - IIS 性能问题
- python - 建立一个浮点 Python 的数据库 - 类型错误:强制转换为 Unicode:需要字符串或缓冲区,找到浮点数
- bash - 通过bash从特定列中删除空间
- android-studio - 切换时如何在 Kotlins 中使用多行?
- javascript - 使用 javascript 检测触摸设备上的不活动状态
- api - 如何使用 bat 文件调用一些带有一些标头的 api url?
- mysql - Mysql合并多个具有相同ID的记录忽略空字段