У меня есть основная модель:
MainModel
-> MainModelForm
, которая используется в представлении
У меня также есть 2 встроенные формы, которые имеют MainModel
в качестве первичного ключа InlineModel1
=> InlineModel1Form (formset = CustomOperatorFormset(BaseInlineFormset))
, который имеет собственный набор проверок. Это настройка 1 или нет, то есть она не требуется, но как только она добавлена, у нее есть некоторые проверки. Использование CustomSetup из BaseInlineFormSet работает отлично.
Однако у меня есть другая модель - InlineModel2
, которая не требуется - , пока пользователь не введет хотя бы 1 строку в InLineModel1Form . Я теряю голову над тем, как отправить / проверить это, то есть с использованием данных InlineModel1form и проверить, есть ли какие-либо добавленные строки в форме InlineModel2Form.
Мне нужно настроить оба набора встроенных форм по отдельности, поэтому миксин, показывающий все в одном месте, не будет работать для меня.
forms.py:
class CustomInlineModel2Formset(BaseInlineFormSet):
def clean(self):
cleaned_data = super(CustomInlineModel2Formset, self).clean()
if any(self.errors):
return
i=0
# https://gist.github.com/nspo/cd26ae2716332234757d2c3b1f815fc2
for form in self.forms:
if(not form.is_valid()):
continue
if(form.cleaned_data and not form.cleaned_data.get('DELETE')):
i = i+1
print(form.cleaned_data)
# Use data from request.POST/but from InlineModel1 and add error to field2 in InlineModel2
# Ensure atleast 1 entry is here - so how to run validations, outside this loop?
InlineModel2FormSet = forms.inlineformset_factory(MainModel, InlineModel2,
widgets = {},
form=InlineModel2Form,
formset = CustomInlineModel2Formset,
exclude=[],
min_num = 0, # min_num is to be validated as 1 only if InlineModel1Form has any entries added
max_num = 2,
extra=0,
can_delete=True,
# formfield_callback=None
)