form.save(commit = false)在django 1.2.3中的行为不同?
-
04-10-2019 - |
题
在今天之前,我一直在使用Django 1.1。为了确保我跟上时代的步伐,我决定更新我的Django环境以使用Django 1.2.3。不幸的是,我遇到了一个问题。
以下代码没有在1.1中提高价值eRROR:
instance = FormClass(
request.POST,
instance=existing_instance
).save(commit=False)
但是,既然我已经升级了,它每次都会提高价值。我有一个SSN字段作为表格的一部分提交,并且在执行Instance.save()呼叫之前将破折号剥离。不幸的是,由于Django认为我的SSN值太长(预期9个字符,并且收到11-123-45-6789)。
我已经浏览了Django文档,但找不到与此更改有关的任何内容。知道发生了什么事吗?我一直认为“ commit = false”参数的目的是在保存信息之前允许对数据进行预处理。
我想念什么吗?
解决方案
根据 1.2文档 save()
方法, ,“如果您使用commit = false调用save(),则它将返回尚未保存到数据库的对象。”因此,我不确定为什么功能会发生变化,但是在1.1验证/检查代码中只有在将对象保存到数据库中才能运行,而在1.2中,它发生在1.2中(在保存对象之前) 。
无论如何,如果您要清洁以一种形式输入的数据,则可能应该在FormClass中清洁它:
def clean_ssn(self):
data = re.sub(r'[^0-9]','',self.cleaned_data['ssn'])
#validation code here
return data
至少应该解决问题...
不隶属于 StackOverflow