models模型类
模型类需定义在子应用的 models.py 中
常用字段类型
类型 | 说明 |
CharField | 字符串类型字段(必须有一个参数 maxlength,校验最大字符长度) |
IntegerField | 整数字段 |
FloatField | (浮点数) 小数字段 (max_digits总位数(不包括小数点和符号),decimal_places 小数位数) |
DateTimeField | 日期字段 (日期+时间) |
DateField | 日期字段 |
DecimalField | (精确)小数字段 |
FileField | 文件字段 (保存和处理上传的文件) |
Imagefield | 图片字段(保存和处理上传的图片) |
IPAddressField | IP字段 |
SmalllntegerField | 小整数字段 |
TextField | 文本字段,一般超过 4000个字符时使用 |
URLField | 网页地址字段 |
BooleanField | 布尔类型字段、值为Truue或False |
AutoField | 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自增属性 |
常用字段字段属性
属性 | 说明 |
null (null=True | False) | 数据库字段的设置是否可以为空 (数据库进行验证) |
blank (blank=True | False) | 字段是否为空django会进行校验 (表单进行验证) |
choices | 轻量级的配置字段可选属性的定义 choices=((0,男),(1,女)) |
default | 字段的默认选项,可以是一个值或是一个回调函数,当是一个函数对象时,在创建新对象时,函数调用 |
primary_key (=True | False) | 一般不需要定义是否为主键,如果没有指明主键的话,diango胡自动添加一个默认主键: id=models.AutoField(primary_key=True) |
unique | 是否唯一 (对于数据表而言) |
verbose_name | 对于字段的一个可读性更高的名称,若不指定该属性,默认使用字段的属性名称 |
db_index | 当该值为 True 时,为该字段创建索引 |
db_column | 数据库中用来表示该字段的名称,如果未指定,那么 Diango 将会使用 Field 名作为字段名 |
模型类创建案例
不同的数据库中 对应的 sql语句不一样, django为了简单, 统一采用 模型类,模型类 定义在 app/models.py 文件中
from django.db import models
class Books(models.Model):
# 模型类中不需要指定 id字段,会自动生成
name = models.CharField(max_length=20,verbose_name="书名")
# 数据库的可变字符串类型 varchar(20)
# max_length : 指定可变字符串的最大长度
price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='价格')
# 数据库的 金钱有关的字段 decimal(7,2)
# max_digits: 指定数字的最大位数,包括小数
# decimal_places: 指定小数的 位数
hire_date = models.DateField(verbose_name='出版日期')
# 数据库的 日期字段 date
# auto_now_add: 在对象添加时,自动设置为 当前时间, 后期不再改变
# auto_now: 在对象每次更新时,时间都会设置为更新时的时间
# 避免矛盾,`auto_now`,`auto_now_add`,`default`不能同时出现,一个字段属性只能有其中一条设置,
# 当设置了`auto_now`,或`auto_now_add`时,也会让该字段默认具有`blank=True`(字段可以为空)属性
author = models.CharField(max_length=20, verbose_name='作者')
num = models.IntegerField(verbose_name='库存', default=0)
publish = models.CharField(max_length=20, verbose_name='出版社')
type = models.CharField(max_length=10,verbose_name="类别")
sales_volume = models.IntegerField(verbose_name='销量', default=0)
def __str__(self):
# 修改对象的描述信息, 此时查看图书对象,已经不是默认的对象地址信息, 而是图书对象的书名
return self.name
# 元选项一定属于模型类中的一部分,不能单独使用
class Meta:
db_table = 'tb_book' # 指定表名, 默认为 app名_模型类名
verbose_name = '图书' # amdin中显示的表的名字,为单数形式
verbose_name_plural = verbose_name # 复数形式
数据库迁移
模型类创建好后,将模型类迁移到数据库
在终端执行迁移命令,会在对应app下生成一个迁移文件migrations 用来记录数据库迁移的信息
如果数据库出错,需删库重创时,必须把migrations 文件删掉再重新创建,否则报错
# 生成迁移文件
python manage.py makemigrations
# 执行迁移文件同步数据到数据库
python manage.py migrate
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容