开发者社区> 问答> 正文

Django Filed Null属性?报错

今天在学习Django的时候,看到了字段Null属性,尝试了一下,但是觉得有问题,所以想请教一下,下面分别列出我的代码

Model代码

class Person(models.Model):

    name = models.CharField(max_length=30, null=False)

    class Meta:
        db_table = 'Person'



里面之定义了一个name属性,null=False也就是不能为空

View代码

def add(request):
    p1 = Person()
    p1.save()

    p2 = Person(name='')
    p2.save()

    return HttpResponse('OK')



在View中创建了两个对象,一个是p1,没有指定name属性,另一个p2,name属性的值为空字符串

下面是在命令行使用desc命令查看的表定义。

+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(30) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+



执行程序,p1和p2竟然都插入到了数据库里面,下面是数据库中的值。

mysql> select * from Person;
+----+------+
| id | name |
+----+------+
|  1 |      |
|  2 |      |
+----+------+
2 rows in set (0.00 sec)



p2对象的name属性值为'',不是null,所以插入到数据库中了,这我理解。但是我不理解的是,p1对象并没有指定name属性,我觉得此时p1的name属性应该是null,model中定义的name是不能为null的,为什么还能正常插入到数据库中不报错。

使用Person.objects.get(id=1),Person.objects.get(id=2)分别得到两个对象,查看他们name属性的类型,都为<type 'unicode'>,所以请大神帮我解释一下。谢谢了。

另外我现在在model中指定name属性null=False,怎样造数据才能在插入name指的时候报错,也就是怎样造出name属性为null的值。


展开
收起
爱吃鱼的程序员 2020-06-09 15:47:58 427 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    blank=False

    ???

    null=False表示不能为空。CharField和TextField字段都有默认值default='',所以满足 null=False的条件。

    https://docs.djangoproject.com/en/1.8/ref/models/fields/#null
    2020-06-09 15:48:15
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载