【问题标题】:Django - how to save form without validation?Django - 如何在没有验证的情况下保存表单?
【发布时间】:2016-10-25 12:02:25
【问题描述】:

我需要将表单保存功能与表单确认分开。我想给用户保存表单而不首先验证其内容的可能性,但是当表单完成后,用户应该点击确认按钮,这意味着数据验证并将其保存到数据库。

当我尝试使用commit=False 参数保存它时,它会引发错误:

The Table could not be created because the data didn't validate.

更新: 我所做的是删除模型中的验证并创建不同的验证函数,该验证在用户完成表单时执行。所以我不会用 Django 术语验证这个表单。

但如果有人有不同的解决方案,请回答。

【问题讨论】:

  • 如果它不写入数据库,“保存表单”是什么意思。保存到哪里?
  • 那么,您希望用户能够保存他们填写表单的进度,这听起来对吗?这样他们可以稍后回来完成它?
  • @sytech 是的,完全正确。
  • @spectras,将其保存到数据库中,无需在 clean() 方法中执行验证

标签: python django django-models django-forms


【解决方案1】:

在forms.py中,需要指定所有字段都不是必需的,将required=False传递给Field构造函数:

示例:

first_name = forms.CharField(max_length = 150, required=False)

【讨论】:

  • 但是这个字段是必需的。不是临时保存,而是最终保存。
【解决方案2】:

我有同样的问题。我最终得到的解决方案是使用两个表:

  • 一个用于未确认的数据(包含 JSON 格式的数据和布尔字段 is_confirmed
  • 一个用于确认数据

如果您的数据库支持 JSON 数据类型(例如 MySQL 5.7+),您可以只使用以前的表。

我认为这样会更好,因为验证不仅仅涉及必填字段。想象一下,用户在date 字段中输入了无效日期。如果您在没有验证的情况下保存它,它将以NULL(或0000-00-00)的形式保存到db。所以,原来的无效值会丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多