我有一个表单,我希望所有其他表单都从中继承,下面是我尝试过的,但是我得到了一个错误,这表明init不是从AbstractFormBase类运行的。SchemeForm“should”在运行自己的参数之前继承所有__init__参数。
错误:

'SchemeForm' object has no attribute 'fields'

代码更新:
class AbstractFormBase(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-lg-3'
        self.helper.field_class = 'col-lg-8'

class SchemeForm(AbstractFormBase, NgModelFormMixin,):
    def __init__(self, *args, **kwargs):
        super(SchemeForm, self).__init__(*args, **kwargs)
        self.helper.layout = Layout(
            'name',
            'domain',
            'slug',

        )

最佳答案

您的AbstractFormBase类与继承树中的其他类不合作。您的SchemeForm类有一个特定的MRO,一个方法解析顺序。super()调用将仅按该顺序调用next__init__方法,而AbstractFormBase是下一个方法(后跟NgModelFormMixinforms.ModelForm)。
您希望通过在__init__类中使用super()AbstractFormBase调用传递到MRO中的下一个类:

class AbstractFormBase(object):
    def __init__(self, *args, **kwargs):
        super(AbstractFormBase, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-lg-3'
        self.helper.field_class = 'col-lg-8'

注意,这同样适用于NgModelFormMixinform.ModelForm要求Meta类具有fieldsexclude属性(请参见selecting the fields to use

关于python - Django表单继承不起作用__init__,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21042624/

10-16 03:12