Django встроенная форма - PullRequest
       39

Django встроенная форма

0 голосов
/ 14 декабря 2018

У меня есть родительская и несколько дочерних форм, использующих встроенный набор форм.Это работает нормально.

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

Я знаю, что могу получить доступ к родительской форме, используя self.instance.FOO при переопределении BaseInlineFormSet и снова это работает нормально, но я не могу найти способ определить, сколько фактических форм было отправлено и жизненно важные данные в них.

Кто-нибудь знает, как?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Спасибо, Даниэль, за то, что указал мне правильное направление.Я достиг того, что мне нужно, переопределив baseinlineformset и выполнив следующие действия в методе clean:

    # submitted form counter
    i = 0

    for form in self.forms:
        cleaned_data = form.cleaned_data
        if cleaned_data:
            # discounts forms marked for deletion
            if not self._should_delete_form(form):
                i = i + 1

    if self.instance.ownership.type == 'Joint' and i < 2:
        raise ValidationError(
            "You must enter both clients when specifying joint "
            "ownership."
        )

и т. Д.

Я также обнаружил, что мне также необходимо удалить все формы, удаляемые во время того жесообщение из формы.

0 голосов
/ 14 декабря 2018

В методе formset clean, self.cleaned_data будет список словарей - по одному для каждой формы.Так что вы можете сделать:

class MyInlineFormSet(formsets.InlineFormSet):
    def clean(self):
        if len(self.cleaned_data) != self.instance.my_value:
            raise forms.ValidationError('wrong number of forms')
...