Проверка формы Django - значения сумм в форме набора - PullRequest
0 голосов
/ 07 января 2019

У меня есть страница, содержащая форму Django, затем под ней набор форм (динамическое число строк).

В верхней форме находится поле «общая длина», а каждая строка в наборе форм ниже содержит поле «длина». Мне нужно проверить, что сумма длин, представленных для каждой строки набора форм, составляет <= поле «общая длина» в единственной форме в верхней части. </p>

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

Редактировать:

Решено путем отображения логики проверки и циклического перебора формы:

if form.is_valid() and formset.is_valid():
    total_sample_length = form.cleaned_data['total_length']
        if total_sample_length:
            sum_segment_lengths = 0
            for segment_form in formset:
                sum_segment_lengths += segment_form.cleaned_data['length']
            if sum_segment_lengths > total_sample_length:
                for segment_form in formset:
                    segment_form.add_error('length', 'Sum of Segment Lengths must be <= Total Length!')
                return render(request, template, {...})

1 Ответ

0 голосов
/ 07 января 2019

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

В представлении вы должны оценить каждую форму набора форм и получить общую длину.

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

...