2014-02-19 5 views
0

Я использую django, но это скорее общий вопрос python.Иерархия нескольких классов Python __init__ не выполняется

Я определил класс, который я намерен использовать для расширения классов ModelForm и Form, из django.forms.

код выглядит следующим образом:

class FormMixin(object): 

    def __init__(self, *args, **kwargs): 
     """ every method ocurrence must call super """ 
     super(FormMixin, self).__init__(*args, **kwargs) 
     self.new_attr = 'This is an attribute' 



class ModelFormAdapter(forms.ModelForm): 
""" I use this class so __init__ signatures match """ 
    def __init__(self, *args, **kwargs): 
     """ every method ocurrence must call super """ 
     super(ModelFormAdapter, self).__init__(*args, **kwargs)   


class BaseModelForm(ModelFormAdapter, FormMixin): 

    def __init__(self, *args, **kwargs): 
     """ BaseModelForm never gets the attribute new_attr """ 
     super(BaseModelForm, self).__init__(*args, **kwargs) 

Я даже отлажена это и INIT метод FormMixin никогда не вызывается. Что я делаю не так? То, что я хочу добиться того, чтобы добавить некоторые атрибуты для форм и полой предобработки этикетки и CSS классов

ответ

2

Это потому, что один из предков ModelFormAdapter «s (BaseForm), не вызывает super и разрывы цепи. Поместите FormMixin сначала в родительский список.

Смежные вопросы