django数据模型中null和blank的区分

虽然本人使用django也有几年的时间,但是还是对django中数据模型的nullblank有点分不清楚,我想很多人也和我一样的困惑,现在将全面彻底的讲解下两个的区别。

一、null的使用

  • 1、默认是False的,如果设置为True的时候,django将会映射到数据表指定是否为空
  • 2、如果这个字段设置为False的时候,如果没给这个字段传递任何值的时候,django也会使用一个空字符串('')存储进去
  • 3、如果这个字段设置为True的时候,django会产生两种空值的情形(null和空字符串)
  • 4、如果想要在表单验证的时候允许这个字符串为空的时候,django建议使用blank=True
  • 5、如果你的字段BooleanField的时候,可以为空的建议使用NullBooleanField

  • 1、数据模型代码

    class BookModel(models.Model):
        """
        书籍的数据模型
        """
        uuid = models.UUIDField(unique=True, default=uuid.uuid4, verbose_name='uuid')
        name = models.CharField(max_length=100, default='', null=True, verbose_name='书籍名称')
        # null默认是False,但是本案例中还是写上去,更好区分
        author = models.CharField(max_length=100, default='', null=False, verbose_name='作者')
        # blank=True仅仅是在表单校验的时候可以为空,别的时候没什么区别
        price = models.FloatField(default=0, blank=True, verbose_name='价格')
        create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
        update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
    
        def __str__(self):
            return '<BookModel>({}, {}, {}, {}, {}, {})'.format(self.uuid, self.name, self.author, self.price,self.create_time, self.update_time)
    
        class Meta(object):
            db_table = 'book'
    
  • 2、sql语句

    CREATE TABLE `book` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(100) DEFAULT NULL,
      `price` double NOT NULL,
      `create_time` datetime(6) NOT NULL,
      `update_time` datetime(6) NOT NULL,
      `uuid` char(32) NOT NULL,
      `author` varchar(100) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `uuid` (`uuid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
  • 3、数据库表结构

  • 4、插入数据后显示对比

二、blank的使用

  • 1、这个字段是在表单验证的时候可以为空,默认是False
  • 2、这个和null是有区别的
    • blank=True仅仅是在表单验证的时候可以为空
    • null=True仅仅是数据库级别的null
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水痕01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值