Django表单模板错误

Django表单模板错误,django,forms,templates,Django,Forms,Templates,我给自己写了一份表格: class Autopoweroff_Form(forms.Form): autopoweroff_groups = forms.CharField(required=True) autopoweroff_groups_hosts = forms.CharField(required=True) autopoweroff_groups_start = forms.CharField(required=True) autopoweroff_g

我给自己写了一份表格:

class Autopoweroff_Form(forms.Form):
    autopoweroff_groups = forms.CharField(required=True)
    autopoweroff_groups_hosts = forms.CharField(required=True)
    autopoweroff_groups_start = forms.CharField(required=True)
    autopoweroff_groups_end = forms.CharField(required=True)
    autopoweroff_groups_startup_delay = forms.CharField(required=True)
    autopoweroff_groups_idle_time = forms.CharField(required=True)
现在我知道我不必显式地设置reuqired=True,但请暂时忍受它。 不管怎样,让我们继续前进

现在,由于我讨厌在视图中执行验证等操作,我刚刚为该表单定义了一个更新函数:

    def update(self, data):
        if not self.is_bound and data is not None:
            raise Exception()

        if self.is_valid():
            curr_group = self.cleaned_data['autopoweroff_groups']
            ...
在我看来,就这样称呼它:

if request.method == 'POST':
        form = Autopoweroff_Form(data=request.POST)
        form.update(data=request.POST)
        return HttpResponseRedirect('/admin/thin/create_autopoweroff')
    else:
        form = Autopoweroff_Form()

    ...
现在的问题是,如果我没有在表单中键入任何内容,表单将按原样返回,而不会显示任何错误。我也知道它不会做任何事情,因为:

事实上,如果表单中有任何错误,Django当前将完全删除已清理的_数据字典。然而,这种行为在将来可能会改变,因此首先清理自己的身体并不是一个坏主意

如果我尝试:

def update(self, data):
        if not self.is_bound and data is not None:
            raise Exception()

        if self.is_valid():
            curr_group = self.cleaned_data['autopoweroff_groups']
            ...
        else:
            print self.errors
我得到了我希望在模板中看到的错误。 我也试过:

def clean_autopoweroff_groups(self):
        autopoweoff_groups = self.cleaned_data.get('autopoweroff_groups', "")
        if autopoweoff_groups == '':
            print "Validation Error"
            raise forms.ValidationError('Please Enter A Name')
        return autopoweroff_groups
我到底做错了什么

更新: 我认为:

    if request.method == 'POST':
        form = Autopoweroff_Form(data=request.POST)

        if form.is_valid():
            form.update(data=request.POST)
            return HttpResponseRedirect('/admin/thin/create_autopoweroff')
    else:
        form = Autopoweroff_Form()

在我的表单中,remove if self.is_valid()

Django具有内置验证,因此您无需重写它:

class Autopoweroff_Form(forms.Form):
    # I suggest not prefixing your fields with the name of the class
    groups = forms.CharField(required=True)
    hosts = forms.CharField(required=True)
    start = forms.CharField(required=True)
    end = forms.CharField(required=True)
    delay = forms.CharField(required=True)
    idle_time = forms.CharField(required=True)
在你看来:

if request.method == 'POST':
    form = Autopoweroff_Form(data=request.POST)
    if form.is_valid():
        return HttpResponseRedirect('/admin/thin/create_autopoweroff')
else:
    form = Autopoweroff_Form()
请注意,您在视图中调用的是_valid(),而不是表单

如果要对单个字段或一组字段执行如此复杂的验证,可以覆盖表单
clean()
clean[field\u name]()
方法

请看这里: