模型是描述、存储数据的字段和行为,一般情况下,一个模型映射一张数据库表,模型类的属性对应数据库表字段,模型的对象对应数据库表的一行数据。

字段类型

在编写模型类的属性时,需要使用字段类型,常用的字段类型如下:

类型

说明

AutoField

自动增长的IntegerField

CharField(max_length=字符长度)

字符串

TextField

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的所有属性和方法

大家也可以在官网查看还有哪些字段类型。

模型字段参考 | Django 文档 | Django (djangoproject.com)

字段选项

在使用字段类型时,可以通过字段的参数实现对字段的选项,常用的选项有:

约束

说明

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里是否可编辑,不可编辑则不显示

大家也可以在官网查看还有哪些字段选项。

模型字段参考 | Django 文档 | Django (djangoproject.com)

定义模型

一般来说,定义模型都是写在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        # 执行迁移

如下图所示:

Django框架——模型_字段

执行生成迁移文件操作后,会在user文件夹中migrations生成名为0001_initial.py文件,文件内容如下图所示:

Django框架——模型_字段类型_02

其中:

dependencies:其他依赖的迁移;

operations:操作,该模型做了什么操作,这里是创建了名为UserModel的数据库表,字段有name和age。

执行迁移操作后,打开db.sqlite3,如下图所示:

Django框架——模型_Python_03

这样就成功编写模型并实现迁移了。

当我们的模型类在迁移后进行了修改,在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

如下图所示:


Django框架——模型_字段_04


假设原来的数据库已经有数据了,由于新加了列,需要给字段加默认值,所以程序就等待我们选择添加默认值的方式,其中:

选项1:自己手动加默认值;

选项2:退出生成迁移文件,在模型中通过default参数添加默认值;

这里我们选择选项2,并在模型类属性中添加default默认值。

设置好后,再执行迁移操作,如下图所示:


Django框架——模型_默认值_05


删除迁移

我们也可以通过删除迁移的方式,回到之前的迁移。

首先在数据库中找到migrations迁移数据表,如下图所示:


Django框架——模型_字段_06

然后再在migrations文件夹中删除迁移文件,并修改模型类,再执行如下代码进行迁移:


python manage.py makemigrations    # 生成迁移文件
python manage.py migrate        # 执行迁移