验证失败时Django表示字段初始值

Joh*_*ohn 7 django django-forms

如何在提交表单但验证失败后设置字段元素的值?例如

if form.is_valid():
    form.save()
else:
    form.data['my_field'] = 'some different data'
Run Code Online (Sandbox Code Playgroud)

我不是真的想把它放在视图中,而是宁愿把它作为表单类的一部分.

谢谢

Fel*_*ing 16

文件说:

如果您有一个绑定的 Form实例,并希望以某种方式更改数据,或者如果要将未绑定的Form实例绑定到某些数据,请创建另一个Form实例.有没有办法改变的数据在表格实例.一旦创建了Form实例,您应该认为它的数据是不可变的,无论它是否有数据.

我真的不相信你的代码有效.但是没问题.根据文档,我会这样做:

if request.method == 'POST':
    data = request.POST.copy()
    form = MyForm(data)
    if form.is_valid(): 
        form.save() 
    else: 
        data['myField'] = 'some different data'
        form = MyForm(initial=data)
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案 如果你想保留vaildated表单的错误,你可以使用`new_form = MyForm(initial = data)new_form._errors = form._errors form = new_form` (5认同)

Joh*_*ohn 6

我最终做了

if request.method == 'POST':
    new_data = request.POST.copy()
    form = MyForm(data=new_data)
    if form.is_valid(): 
        form.save() 
    else: 
        new_data['myField'] = 'some different data'
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人