【问题标题】:Django form - can I return any variables when raising a ValidationErrorDjango 表单 - 引发 ValidationError 时我可以返回任何变量吗
【发布时间】:2018-05-29 17:08:30
【问题描述】:

我已经构建了一个自定义表单,其中包含几个自定义字段(包含我的模型的主键),所以我没有使用 clean_() 方法,只使用 clean()。

我获取数据,如果字段不包含某些输入,我会引发 ValidationError。但是,我不希望这样来完全重置我的表单输入...有没有办法在提交时“保存”表单的状态...或者即使您引发验证错误也可以返回值?

表格:

def clean(self):

    data = self.data
    my_data = data.getlist('my_data')

    ... use my_data to create pandas dataframe ...

    missing = df.loc[(
                      ((df['status'] == 'report') | (df['status'] == 'toconfirm')) &
                       (df['evidence'] == ''))]

    if not missing_evidence.empty:

        error_ids = missing_evidence['obj'].tolist()
        error_variants = [str(o) for o in error_ids]
        error_variants = "; ".join(error_variants)

        raise(forms.ValidationError(('%(value)s incorrect'),
                    params={'value': error_variants},
                ))
        ** here can I return dataframe, and re-set up my form? **

【问题讨论】:

  • 你没有重置值,你仍然可以使用form.data['field_name']获取数据。

标签: django forms validation


【解决方案1】:

是的,您可以将相同的表单实例返回到模板,它将包含所有提交的数据

form = SomeForm(request.POST)
if form.is_valid():
    # Do sucess step tasks here
else:
    return render (request, template_name, {'form': form})

现在您可以在模板中通过form.field.value 访问字段的值

<input type='text' name='first_name' value='{{form.first_name.value}}'>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多