本文介绍了Django如何在自定义窗体的子类中覆盖clean()方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个带有自定义验证的自定义表单:

I created a custom form with custom validation like this:

class MyCustomForm(forms.Form):
    # ... form fields here

    def clean(self):
        cleaned_data = self.cleaned_data
        # ... do some cross-fields validation here

        return cleaned_data

现在,这个窗体是用另一个具有自己的clean方法的表单进行子类化的。

什么是正确的方法来触发clean()方法?

此刻,这就是我所做的:

Now, this form is subclassed with another form which has its own clean method.
What is the correct way to trigger both clean() methods?
At the moment, this is what I do:

class SubClassForm(MyCustomForm):
    # ... additional form fields here

    def clean(self):
        cleaned_data = self.cleaned_data
        # ... do some cross-fields validation for the subclass here

        # Then call the clean() method of the super  class
        super(SubClassForm, self).clean()

        # Finally, return the cleaned_data
        return cleaned_data

似乎有效。但是,这使得两个clean()方法返回 clean_data ,这对我来说似乎有点奇怪。

这是正确的吗?

It seems to work. However, this makes two clean() methods return cleaned_data which seems to me a bit odd.
Is this the correct way?

推荐答案

你做得很好,但是你应该加载clean_data从超级调用,如下所示:

You do it well, but you should load cleaned_data from super call like this:

class SubClassForm(MyCustomForm):
# ... additional form fields here

def clean(self):
    # Then call the clean() method of the super  class
    cleaned_data = super(SubClassForm, self).clean()
    # ... do some cross-fields validation for the subclass 

    # Finally, return the cleaned_data
    return cleaned_data

这篇关于Django如何在自定义窗体的子类中覆盖clean()方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-25 20:23