卡在Django表单验证中

时间:2018-11-25 17:31:23

标签: python django

我正在尝试在用于检索ListView视图中的对象列表的Django表单上运行验证。尽管在这里阅读了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”)。

1 个答案:

答案 0 :(得分:0)

默认情况下,FormView仅在POST上处理表单; GET用于最初显示空白表格。因此,您需要在模板表单元素中使用method="post"

您的action属性也是可疑的;它需要指向表单视图的URL。如果实际上是URL,请注意,在Django URL中通常不使用扩展名,例如“ .html”,我建议不要这样做。