UnitTest для Django Inline Formset

Задача: нужно протестировать через unittest кастомную валидацию в наборе форм (FormSet).

forms.py

class MyFormSet(BaseInlineFormSet):
    def clean(self):
        super().clean()
        forms = list(filter(lambda form: len(form.cleaned_data), self.forms))

        if not forms or any(self.errors):
            return

        for form in forms:
            ...

Этот кастомный формсет используется в админке Django:

admin.py

class MyInline(admin.TabularInline):
    formset = MyFormSet
    model = ClientAgreement

class ClientAdmin(admin.ModelAdmin):
    form = Client
    inlines = [
        MyInline
    ]

Внутри теста создаю формсет следующим способом:

formset = inlineformset_factory(Client, ClientAgreement, formset=MyInlineFormSet, fields='all')

Затем создаю инстанс со своим объектом и отправляю данные:

data = {
            'client_agreements-TOTAL_FORMS': '2',
            'client_agreements-INITIAL_FORMS': '2',
            'client_agreements-1-id': self.second_client_agreement,
            'client_agreements-1-agreement': self.second_client_agreement.agreement,
            'client_agreements-1-is_default': False,
            'client_agreements-0-id': self.online_client_agreement,
            'client_agreements-0-agreement': self.first_client_agreement.agreement,
            'client_agreements-0-is_default': True,
}

client_formset = formset(data, instance=self.second_client)
client_formset.save()

После вызова client_formset.save() попадаю в MyFormSet.clean, но после super().clean() внутри MyFormSet.clean для полей небулевого типа отображается ошибка:

['Выберите корректный вариант. Вашего варианта нет среди допустимых значений.']

Выглядит так, как будто теряется привязка внутренних форм к поданным данным. Не могу понять как корректно отправить изменения, чтобы проверить свою логику на работоспособность.

Вернуться на верх