1

Django 说:“请注意,如果表单没有被验证,调用 save() 将通过检查 form.errors 来完成。如果表单中的数据没有验证 - 即如果 form.errors 评估,则会引发 ValueError为真。”

我无法清除的是

  • 当我在 ModelForm 上调用 save 时会运行验证吗?

  • 如果我已经使用 form.is_valid() 方法验证了表单数据,那么 save() 方法将再次进行验证。(我问这个是因为某些验证需要我对外键验证进行数据库查询,因为它有一些限制)

我问这个问题好像第一个问题是正确的,而不是我认为根本不进行验证而是只调用 save 方法,让它调用验证方法并捕获它是一个好主意。

4

1 回答 1

1

第一个问题 - 是的。正如文档所说,调用 save() 访问 form.errors,如果表单尚未验证,则会触发验证。

第二个问题 - 不,验证不会再次运行。一旦表单被验证,无论是通过调用 is_valid() 还是调用 .save(),form.errors 都会被填充,并且可以在不重新运行验证的情况下读取。

无论采用哪种方法,验证都将只运行一次。

于 2013-05-03T19:52:16.360 回答