美文网首页
07.模型详解 -- 字段类型

07.模型详解 -- 字段类型

作者: __深蓝__ | 来源:发表于2019-03-07 16:41 被阅读0次

    ORM回顾

    ORM(Object-Relation Mapping),对象-关系映射,对于开发人员主要带来了如下好处:

    • 实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要修改代码。
    • 只需要面向对象编程,不需要面向数据库编写代码。
    • 在MVT中Model中定义的类,通过ORM与关系型数据库中的表对应,对象的属性体现对象间的关系,这种关系也被映射到数据表中。

    Django框架中ORM示意图如下:

    模型创建步骤回顾

    • 在models.py中定义模型类
    • 生成迁移文件
    • 执行迁移

    定义属性

    语法格式:属性 = models.字段类型(选项)

    属性命名限制:

    • 不能是python的保留关键字
    • 不允许使用连续的下划线
    • 定义属性时需要指定字段类型,通过字段类型的参数指定选项

    说明:

    • Django会为表创建自动增长的主键列,每个模型类只能有一个主键列
    • 如果在数据库中设置了主键,Django将不会创建主键列
    • 默认创建的主键列属性为id,可以使用pk代替,pk表示primary key。
    • pk是主键的别名,若主键名为id2,那么pk是id2的别名。

    字段类型

    使用时需要引入django.db.models包,字段类型如下:

    数据类型 说明
    AutoField 自动增长的IntegerField,通常不用指定
    不指定时Django会自动创建属性名为id的自动增长属性。
    BooleanField 布尔字段,值为True或False。
    NullBooleanField 支持Null、True、False三种值。
    CharField 字符串
    CharField (max_length=字符长度)
    max_length表示最大字符个数
    TextField 大文本字段,一般超过4000个字符时使用。
    IntegerField 整数
    DecimalField 十进制浮点数
    DecimalField (max_digits=None, decimal_places=None)
    max_digits表示总位数,decimal_places表示小数位数
    FloatField 浮点数
    DateField 日期
    DateField [auto_now=False, auto_now_add=False])
    auto_now每次保存对象时,自动设置该字段为当前时间
    auto_now_add当对象第一次被创建时自动设置当前时间
    auto_now_addauto_now互斥,组合将会发生错误。
    TimeField 时间,参数同DateField
    DateTimeField 日期时间,参数同DateField
    FileField 上传文件字段
    ImageField 继承于FileField,对上传的内容进行校验,确保是有效的图片

    选项

    通过选项设置字段的约束,选项如下:

    选项 说明
    null 设置非空约束,默认为False
    blank 表示字段允许为空,默认为False
    null是数据库范畴的概念,blank是表单验证范畴的
    db_column 指定字段的名称,缺省使用属性名
    db_index 表示为此字段创建索引,默认为False
    default 默认值
    primary_key 设置主键约束,默认为False,通常作为AutoField的选项使用
    unique 设置唯一约束,默认为False

    实例演练

    • 在SQLyog中新建数据库 test2

    • 修改models.py中的模型类,编码如下:

    from django.db import models
    
    # 定义图书模型类BookInfo
    class BookInfo(models.Model):
        # 指定btitle对应的字段名为title
        btitle = models.CharField(max_length=20, db_column='title')
    
        bpub_date = models.DateField()  # 发布日期
        bread = models.IntegerField(default=0)  # 阅读量
        bcomment = models.IntegerField(default=0)  # 评论量
        isDelete = models.BooleanField(default=False)  # 逻辑删除
    
    
    # 定义人物模型类PersonInfo
    class PersonInfo(models.Model):
        pname = models.CharField(max_length=20)  # 人物姓名
        pgender = models.BooleanField(default=True)  # 人物性别
        isDelete = models.BooleanField(default=False)  # 逻辑删除
    
        # 人物描述,数据库中的字段可以为空,但后台管理页面的输入框不能为空
        pcomment = models.CharField(max_length=200, null=True, blank=False)
    
    • 生成迁移文件并执行,查看test2数据库中的内容





    - end -

    相关文章

      网友评论

          本文标题:07.模型详解 -- 字段类型

          本文链接:https://www.haomeiwen.com/subject/tyoxpqtx.html