ORM框架映射
类—数据表
对象—数据行
属性—字段
1.模型类创建流程
1.1 创建应用
1.2 在应用的models.py中编写类模型
from django.db import models
class 模型类名称(models.Model):
字段名 = models.字段类型(字段选项)
1.3 迁移同步
makemigtations & migrate
1.4 修改模型类
任何关于表结构的修改,都在对应的模型类上修改
eg:为已经存在的表添加名为info的字段varchar(100)
from django.db import models
# Create your models here.
class Book(models.Model):
title = models.CharField("书名", max_length=50, default='')
price = models.DecimalField("定价", max_digits=7, decimal_places=2, default=0.0)
info = models.CharField('信息', max_length=100, default='') # 此行新增
新增后,执行makemigrations生成中间文件,然后执行migrate
2.字段类型
- BooleanField():数据库类型tinyint(1),编程语言True或Flase,数据库1与0
- CharField():数据库类型varchar,必须要制定max_length参数
- DateField():数据库类型date,用于表示日期
参数三选一:
1.auto_now每次保存对象,刷新最新的时间,取值(TRUE/FLASE)updatatime
2.auto_now_add:首次创建时间,取值(True/False),createtime
3.default:设置时间,取值(‘2022-2-6’)
4.FloatField():数据库类型double
5.Decimalfield():与钱相关,必要参数,max_digits:位数总数,包含小数点后面的。decimal_places:小数点后的数字数量
6.EmailField():数据库类型varchar
7.IntegerField():数据类型int
8.ImageFiled():数据库类型varchar(100),保存数据库的路径
9.TextField():数据库类型longtext,大文本
数据表都是以app名字_表名称出现
3.字段选项
字段选项是创建列的额外信息,允许出现多个字段选项,用逗号隔开,关键字传参。
- primary_key:True/False
- blank:True/False控制字段是否允许提交空值
- null:True/False,表示是否允许改了为空值,默认为False,如果为False,加入default选项来设置默认值
- default:列默认值,如果null=False,那么就要给定default
- db_index:True表示改了增加索引
- unique:True表示改字段是唯一索引
- db_column:指定列的名称,如果不指定的情况下采用属性名作为列名,特定情况下,当属性名不能被指定为列名时,使用该参数。
- verbose_name:设置字段在后台admin界面上显示的名称。
只要动了字段选项,均要执行迁移同步
4.meta类
使用meta类给模型赋予属性。
# Create your models here.
class Book(models.Model):
title = models.CharField("书名", max_length=50, default='', unique=True)
pub = models.CharField("出版社", max_length=100, default='')
price = models.DecimalField("定价", max_digits=7, decimal_places=2, default=0.0)
mark_price = models.DecimalField("市场定价", max_digits=7, decimal_places=2, default=0.0)
info = models.CharField('信息', max_length=100, default='')
class Meta:
db_table = 'book'
class Author(models.Model):
name = models.CharField("作者姓名", max_length=11, default='')
age = models.IntegerField("年龄",default=1)
email = models.EmailField("邮箱",null=True)
class Meta:
db_table = 'author'
(知识内容来源于达内教育视频课程)