Django - несколько встроенных форм проверяют 1 набор форм, используя данные другого набора форм - PullRequest
1 голос
/ 06 ноября 2019

У меня есть основная модель:

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
    )
...