覆盖ModelForm is_valid函数

dna*_*njo 4 css django error-handling overriding django-validation

我希望使用CSS为我的表单提供更好的反馈.我已经在做了,但这只是一个干净的代码问题.我有很多ModelForms,我希望他们所有人都以同样的方式行事,所以我认为应该有办法避免重复验证代码.

我创建了一个覆盖的新类 ModelForm

class ModelFormCSS(forms.ModelForm):
    def is_valid(self):
        # run the parent validation first
        valid = super(-->ParentModelForm<--, self).is_valid()

        if not valid:
            for f_name in self.errors:
                classes = self.fields[f_name].widget.attrs.get('class', '')
                if not "errors" in classes:
                    classes += ' errors'
                    self.fields[f_name].widget.attrs['class'] = classes
            return valid

        # all good
        return True
Run Code Online (Sandbox Code Playgroud)

我的问题在于运行父验证,因为我不知道如何获取父表单...是不是有任何方法可以从中获取它self

Dan*_*man 5

您误解了继承在Python中是如何工作的.在super方法中,您必须始终调用当前类:

valid = super(ModelFormCSS, self).is_valid()
Run Code Online (Sandbox Code Playgroud)