第七章、模型详解 -- 字段类型

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数据库中的内容

     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

人生如路兮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值