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 для полей небулевого типа отображается ошибка:
['Выберите корректный вариант. Вашего варианта нет среди допустимых значений.']
Выглядит так, как будто теряется привязка внутренних форм к поданным данным. Не могу понять как корректно отправить изменения, чтобы проверить свою логику на работоспособность.