3

这应该是特定于 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
4

2 回答 2

5

调用类 clean 方法:

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

当您对某些东西进行子类化并重新定义功能但想要确保保留超类功能时,这是一个常见的 Python 事情。当您执行 init 方法时非常常见,因为您始终需要确保调用超类构造函数来设置实例。

于 2012-07-08T19:04:50.437 回答
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_ 开头并以属性名称结尾的任何方法。如果有,它会在运行默认清理方法后运行它们。

于 2012-07-08T19:20:49.550 回答