Django - 保持原始方法的工作并添加新的自定义验证

时间:2012-07-08 19:02:10

标签: python django

这应该是特定于Django的,但我猜它是Python的。

基本上,我不想在我继承的类中覆盖原始方法的工作(可能是Model类),但我想添加其他验证。 这可能吗?任何提示?

class MyUserAdminForm(forms.ModelForm):
    class Meta:
        model = User

    def clean(self):
        // do some additional work even though it's cleaned by parent's clean method

2 个答案:

答案 0 :(得分:5)

调用super类清除方法:

def clean(self): 
    super(MyUserAdminForm, self).clean()
    # more cleaning

这是一个常见的python事情,当你继承某些东西并重新定义functionaly但要确保你保留超类功能。当你执行init方法时非常常见,因为你总是需要确保调用超类构造函数来设置实例。

答案 1 :(得分:0)

class ContactForm(forms.Form):
        message = forms.CharField()
        def clean_message(self):
                num_words = len(message.split())
                if num_words<4:
                        raise forms.ValidationError("Too short a message!")
                return message 

这是在字段上添加验证方法的方法,这确实可以确保进行默认清理。无需再次调用默认清理方法。

资料来源:www.djangobook.com

工作原理:

当在表单对象上调用is_valid()时,系统会查找类中以clean_开头并以属性名称结尾的任何方法。如果他们这样做,它会在运行默认清理方法后运行