【问题标题】:Django Formset Validation - Sum Values in FormsetDjango Formset Validation - Formset 中的总和值
【发布时间】:2019-06-02 00:52:59
【问题描述】:

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

在最上面的表单中是一个“总长度”字段,下面表单集中的每一行都包含一个“长度”字段。我需要验证为表单集的每一行提交的长度总和是否

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

编辑:

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

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

【问题讨论】:

    标签: django django-forms django-views formset django-validation


    【解决方案1】:

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

    在视图上,你应该评估每个formset表单,并得到一个总长度。

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

    【讨论】:

      猜你喜欢
      • 2013-05-09
      • 2020-09-16
      • 2013-03-14
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 2011-01-27
      相关资源
      最近更新 更多