基本上我想清理用户在表单中提交的一些数据,如果出现错误,我会重新显示它。如果我从表单对象中提取数据,这很容易做到。我可以覆盖clean()方法并操纵数据。我也可以在第一次显示时设置.initial值。但是,我找不到一种方法来处理将在出错时重新显示的表单数据。例如,假设用户提交的电话号码为“123 456 test test 7890”,我希望能够删除非字母数字字符(这很容易),并在表单字段中只显示数字“1234567890”
答案 0 :(得分:22)
如果数据来自请求(如果您使用视图就是这种情况),form.data
字典将是QueryDict
,它应该是不可变的。值得庆幸的是,你可以通过先复制它来改变它:
self.data = self.data.copy()
self.data['phone_number'] = 1234567890
如果您直接更改不是来自视图请求的表单实例,您可以直接更改form.data
字典(这是一个简单的字典对象),如下所示:
# Don't need to copy `data` first
self.data['phone_numer'] = 123456789