在上篇文章中,我们学习了Django框架——模板,这篇文章我们学习Django框架——模型。
模型是描述、存储数据的字段和行为,一般情况下,一个模型映射一张数据库表,模型类的属性对应数据库表字段,模型的对象对应数据库表的一行数据。
字段类型
在编写模型类的属性时,需要使用字段类型,常用的字段类型如下:
类型 | 说明 |
---|---|
AutoField | 自动增长的IntegerField |
CharField(max_length=字符长度) | 字符串 |
TextField | 大文本字段 |
IntegerField | 整数 |
DecimalField(max_digits=None,decimal_places=None) | 十进制浮点数,max_digits最大位数,decimal_places=小数点位数 |
FloatField | 浮点数 |
BooleanField | 布尔值 |
DateField([auto_now=False,auto_now_add=False]) | 日期。auto_now每次保存时自动设置字段为当前时间;auto_now_add第一次被创建时自动设置当前时间 |
TimeField | 时间,参数和DateField相同 |
DateTimeField | 日期和时间,参数和DateField相同 |
FileField | 上传文件字段 |
ImageField | 图片文件字段,继承了FileField的所有属性和方法 |
大家也可以在官网查看还有哪些字段。
字段约束
在使用字段类型时,可以通过字段的参数实现对字段的约束,常用的约束有:
约束 | 说明 |
---|---|
null=True | 字段可以为空 |
blank=True | 添加数据时,可以为空值,一般与null搭配使用 |
primary_key=True | 主键 |
auto_now | 每次保存时自动设置字段为当前时间 |
auto_now_add | 第一次被创建时自动设置当前时间 |
choices | 映射或可迭代对象,用作该字段的选项,主要用于后台admin下拉菜单 |
max_length | 最大长度 |
default | 默认值 |
verbose_name | 可读名称,如果没有给定详细名称,Django 会使用字段的属性名自动创建,并将下划线转换为空格 |
name| db_column | 数据库中的字段名称 |
unique=True | 不允许重复 |
db_index=True | 数据库索引 |
editable=True | 在admin里是否可编辑,不可编辑则不显示 |
定义模型
一般来说,定义模型都是写在models.py文件中,示例代码如下:
from django.db import models
class UserModel(models.Model):
# uid为主键
uid = models.AutoField(auto_created=True ,primary_key=True)
# name:CharField字符串类型,最大长度为30,唯一值,索引
name = models.CharField(max_length=30,unique=True,db_index=True)
# age:IntegerField整数类型,默认值为18
age= models.IntegerField(default=18)
这里我们创建了名为UserModel的模型类,类属性有uid、name和age。
注意:当我们不设置主键时,Django会为表增加自增主键列。
迁移
编写模型后,需要执行如下代码进行迁移操作,将模型映射到数据库,
python manage.py makemigrations # 生成迁移文件
python manage.py migrate # 执行迁移
如下图所示:
执行生成迁移文件操作后,会在user文件夹中migrations生成名为0001_initial.py文件,文件内容如下图所示:
其中:
-
dependencies:其他依赖的迁移;
-
operations:操作,该模型做了什么操作,这里是创建了名为UserModel的数据库表,字段有name和age。
执行迁移操作后,打开db.sqlite3,如下图所示:
这样就成功编写模型并实现迁移了。
当我们的模型类在迁移后进行了修改,在models.py中添加如下示例代码:
# sex:BooleanFieldbool类型
sex=models.BooleanField(default=True)
# info:TextField长字符串,大文本
info=models.TextField(null=True,blank=True)
# salary:FloatField浮点数
salary=models.FloatField(default=1000000.345)
# money:DecimalField数值,最大位数6,小数点2位
money=models.DecimalField(max_digits=6,decimal_places=2)
修改模型列后,需要重新执行如下代码生成迁移文件:
python manage.py makemigrations
如下图所示:
假设原来的数据库已经有数据了,由于新加了列,需要给字段加默认值,所以程序就等待我们选择添加默认值的方式,其中:
-
选项1:自己手动加默认值;
-
选项2:退出生成迁移文件,在模型中通过default参数添加默认值;
这里我们选择选项2,并在模型类属性中添加default默认值。
设置好后,再执行迁移操作,如下图所示:
删除迁移
我们也可以通过删除迁移的方式,回到之前的迁移。
首先在数据库中找到migrations迁移数据表,如下图所示:
然后再在migrations文件夹中删除迁移文件,并修改模型类,再执行如下代码进行迁移:
python manage.py makemigrations # 生成迁移文件
python manage.py migrate # 执行迁移
好了,Django框架——模型就学习到这里,下篇文章我们学习Django框架——模型操作(增删改查)。
公众号:白巧克力LIN
该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器等相关文章!
- END -