【问题标题】:ModelForm Validation模型表单验证
【发布时间】:2013-05-03 19:45:08
【问题描述】:

Django 说:“请注意,如果表单尚未验证,调用 save() 将通过检查 form.errors 来完成。如果表单中的数据未验证 - 即如果表单.errors 的计算结果为 True。”

我无法清除的是

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

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

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

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的。感谢你的回答。但是你遗漏了我最想知道的一点。哪种方法最好。我的意思是显式调用 is_valid() 或让它在 save() 方法中运行。
    • 我认为显式调用 is_valid() 是更常见的用法,我自己会这样做。但是,如果您在保存表单之前不需要 cleaned_data 进行任何操作,那么无论哪种方式都无关紧要。
    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多