Множественное наследование и форма Джанго - PullRequest
0 голосов
/ 16 февраля 2012

Почему этот код не работает? Я вижу в отладчике (PyCharm), что строка init выполняется, но не более того. Я попытался поставить там исключение повышения, чтобы быть действительно уверенным и снова ничего не произошло.

class polo(object):
    def __init__(self):
        super(polo, self).__init__()
        self.po=1     <- this code is newer executed

class EprForm(forms.ModelForm, polo):
    class Meta:
        model = models.Epr

1 Ответ

1 голос
/ 17 февраля 2012

Вы используете множественное наследование , поэтому в общем случае Python будет искать методы в порядке слева направо. Поэтому, если у вашего класса нет __init__, он будет искать его в ModelForm, а тот (только если не найден) - в polo. В вашем коде polo.__init__ никогда не вызывается, потому что ModelForm.__init__ вызывается.

Для вызова конструкторов обоих базовых классов используйте явный вызов конструктора:

class EprForm(forms.ModelForm, polo):

    def __init__(self, *args, **kwargs)
        forms.ModelForm.__init__(self, *args, **kwargs) # Call the constructor of ModelForm
        polo.__init__(self, *args, **kwargs) # Call the constructor of polo

    class Meta:
        model = models.Epr
...