zoukankan      html  css  js  c++  java
  • 模型字段设为可选

    编辑表单要求填写每个字段,而有时候某些字段需要是可选的。比如说,我们可能想让 Author 模型的 email 字段可选,即允许使用空字符串。事实也是如此,你
    不可能有每位作者的电子邮件地址。

    解决:email 字段添加 blank=True 参数即可
              email = models.EmailField(blank=True)

    默认情况下,所有字段都设定了 blank=False,意即不允许为空值

    把日期和数值字段设为可选的:
    为日期和数值字段设定 blank=True 时经常遇到问题,这背后涉及很多知识。SQL 使用是一个特殊的值表示空
    ——NULL。它的意思是未知无效,或者其他情境中的特定意思。在 SQL 中,NULL 与空字符串不是一
    回事,就像 Python 对象 None 不是空字符串("")一样。
    因此,特定的字符字段(如 VARCHAR 列)的值既可以是 NULL,也可以是空字符串。这可能导致意料之外的歧
    义:为什么在这个记录中是 NULL,而在其他记录中是空字符串?二者有区别吗,还是说输入的数据不一
    致?以及:如何获取所有为空值的记录,应该包含值为 NULL 和空字符的记录,还是只选择值为空字符串的
    记录?
    为了避免这种歧义,Django 自动生成的 CREATE TABLE 语句中每个列定义都有 NOT NULL

     多数情况下,这种默认行为对应用程序来说是最佳选择,无需费力处理数据不一致。而且,Django 的其他部
    分能很好地支持这个行为,例如 Django 管理后台,当你留空字符字段时,Django 插入数据库的是空字符串
    (而不是 NULL 值)。
    但是,对空字符串不是有效值的数据库列类型(如日期、时间和数字)来说,这样处理不行。如果把空字符
    串插入日期或整数列,数据库有可能报错——这取决于你用的数据库。(PostgreSQL 严格,遇到这种情况时
    抛出异常;MySQL 可能允许这么做,也可能不允许,根据版本、时间和月相而定。)
    此时,只能使用 NULL 指定空值。在 Django 模型中,指定接受 NULL 值的方式是为字段设定 null=True 参数。
    因此,说起来有点复杂:如果想让日期字段(如 DateFieldTimeFieldDateTimeField)或数值字段(如
    IntegerFieldDecimalFieldFloatField)接受空值,要同时添加 null=True blank=True

    publication_date = models.DateField(blank=True, null=True)


    添加 null=True 比添加 blank=True 复杂,因为前者修改了数据库的语义,即修改了 CREATE TABLE 语句,把
    publication_date 字段的 NOT NULL 删掉了。为了完成修改,我们要更新数据库。基于一些原因,Django 不会
    试图自动修改数据库模式,所以每次对模型做这种修改之后要自己动手执行 python manage.py migrate


  • 相关阅读:
    wget 命令用法详解
    VI编辑器的使用方法
    Android APK反编译就这么简单 详解(附图)
    Nginx与X-Sendfile
    腾讯微博OAuth2.0认证介绍
    haporoxy的keeplaive ZZ
    如何监听非本地IP
    haproxy配置直接重定向url
    LVS与其他负载均衡软件的区别
    J2EE基础总结(4)——JSP
  • 原文地址:https://www.cnblogs.com/yu121/p/14963079.html
Copyright © 2011-2022 走看看