首页 文章

为什么Django不建议在基于字符串的字段上使用null = True?

提问于
浏览
0

Django官方文档不建议在基于字符串的字段上使用 null=True . [source]

我明白他们不喜欢有两个不同的 no data 值 . 因此,Django建议只使用空字符串作为 no data 值 . 但是,为什么他们没有选择 None 超过 "" (空字符串)?

2 回答

  • 1

    当NULL和空字符串都表示“无数据”时,您希望选择一个用于一致性 . 如果您有选择,请选择类型稳定性,使用强类型语言更容易处理 - 即空字符串 . 但有时你没有选择 .

    假设您继承了一个字符串字段可以为空的数据库,并且许多行已经填充了NULL . 通常,在它之前的某个应用程序期望来自数据库的NULL值并且正在处理它们 .

    现在,如果您被告知将Django服务连接到同一个数据库,您不希望通过编写没有值的空字符串来打破逻辑,因为另一个应用程序会错误地对待它们 . 例如,它不会正确显示警告,而是静默地打印空字符串 .

    当值总是来自表单时,用户无法在发送数据时或在加载数据时预先填充表单时区分NULL和空字符串 .

    所以我的答案是,如果表单是在数据库中写入数据的唯一方法,那么为了类型稳定性,空字符串可能是更好的选择,而如果表单不是唯一的来源,则必须适应意义已存在于数据库中的值 .

  • 1

    @JulienD有权将其用于了解类型,但是使用对象的属性进行渲染 . 您可能希望缺少值为空 . 如果您使用NULL,那么您将获得Python None ,如果您在模板中使用 {{ model.field }} 将呈现为 None . 为避免这种情况,您需要手动检查或使用模板过滤器 .

    如果您使用 blank=True ,则可以在模板中插入值而无需担心 . 空值只插入 '' .

相关问题