Django Formset Validation - Sum Values in Formset

Django Formset Validation - Sum Values in Formset

我有一个包含 Django 表单的页面,然后在它下面有一个表单集(动态行数)。

顶部表单中有一个 "total length" 字段,下方表单集的每一行都包含一个 "length" 字段。我需要验证为表单集的每一行提交的长度总和 <= 顶部单个表单上的 "total length" 字段。

我不认为我可以在构成表单集的表单上使用普通表单清理方法来执行此操作,因为它没有从表单集中的其他表单获取值的范围。我想我可以改为在视图中执行此操作,但这是最好的方法吗?

编辑:

通过将验证逻辑放在视图中并循环遍历表单集来解决:

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, {...})

您可以使用视图来处理这个问题,并在顶部表单上使用自定义清理方法来引发总长度错误。

在视图上,您​​应该评估每个 formset 表单,并获得总长度。

然后使用顶部表格检查,如果尺寸不适合您的尺寸,则会在清洁时引发错误。