Форма Джанго: множественное наследование - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть несколько классов форм django, подобных этим:

class MyCleaningClassForm(forms.Form):

    def clean(self):
        super(MyCleaningClass, self).clean()
        cleaned_data = {}
        for key, value in self.cleaned_data.items():
            if value:
                cleaned_data[key] = value
        return cleaned_data

class MyDataForm(forms.Form):
    data1 = forms.Charfield(max_length=123)
    data2 = forms.IntegerField()

    def clean(self):
        cleaned_data = {}
        if self.cleaned_data['data1'] == 'lala' \
            and self.cleaned_data['data2'] == 'lili':
            cleaned_data['data1'] = 'lolo'
        return cleaned_data        

    def fill_up_data_dict(self, cleaned_data):
        data_dict = {}
        data_dict['data1'] = cleaned_data['data1']
        data_dict['data2'] = cleaned_data['data2']
        return data_dict

class MySubDataForm(MyDataForm, MyCleaningClassForm):
    other_data = forms.IntegerField()

    def clean(self):
        # I want this line to call both clean methods from the 2 superclass
        super(MySubDataForm).clean()
        self.cleaned_data['my_data_dict'] = self.fill_up_data_dict(
            self.cleaned_data)
        return self.cleaned_data

MyCleaningClass - это класс, который я использую в нескольких других формах.Он удаляет все пустые поля из cleaned_data.

MyDataForm - это класс, который я использую и в нескольких других формах.Этот помогает мне заполнить поле данных в словаре как запрос. POST плоский.Он обрабатывает некоторые фиксированные поля.

Как мне поступить?Есть ли что-нибудь лучше, чем: cleaned_data = MyDataForm.clean(self)?

Более того, я не уверен, как изменить self.cleaned_data.Я знаю, что оба пути приемлемы (из django doc), но я должен сделать cleaned_data = self.cleaned_data непосредственно перед оператором return?

Как бы вы все это сделали?Я даже не уверен, что делаю все правильно ...

...