模型层的了解
大家都知道Django遵循的是MTV模式,其中M指的就是Model,就是今天要学习的模型层。
模型(Model)负责业务 对象和 数据库的 关系映射(ORM)
ORM是“对象-关系-映射”的简称,主要任务是:
- 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。
- 将对象、列表的操作,转换为sql语句。
- 根据设计的模型类生成数据库中的表格。
- 将sql查询到的结果转换为对象、列表
Model是MVC框架中重要的一部分,主要负责程序中用于处理数据逻辑的部分(如数据的存取)。它包含你所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。
模型
我们知道了模型层的作用,你有没有想过模型是一个什么东西呢?下面带领大家一起来学习。
什么是模型?
- 模型是一个Python类,它是由django.db.models.Model派生出的子类。
- 一个模型类代表数据库的一张数据表。
- 模型类中的每一个属性都代表数据库中的一个字段。
- 模型是数据交互的接口,是表示和操作数据库的方法和方式。
创建模型类
在应用下的models.py中编写模型类模板(下面我会讲到字段名相关知识):
from django.db import models
class 模型类名(models.Model):
字段名 = models.字段类型(字段选项)
举个栗子:
class Book(models.Model):
title = models.CharField('书名', max_length=50, default='',unique=True)
public = models.CharField('出版社',max_length=100,default='')
price = models.DecimalField('价格',max_digits=7, decimal_places=2)
info = models.CharField('描述',max_length=100, default='')
market_price = models.DecimalField('零售价',max_digits=7,decimal_places=2,default=0.0)
重点是编写完成后一定要在终端进行迁移同步,执行以下命令:
python3 manage.py makemigrations
python3 manage.py migrate
字段类型
字段是模型中最重要的内容之一,也是唯一必须的部分。字段在Python中表现为一个类属性,体现了数据表中的一个列。请不要使用clean
、save
、delete
等Django内置的模型API名字,防止命名冲突。下面我会列举出一些常见的字段类型:
BooleanField():数据库类型是tinyint(1),使用Ture或False来表示值。
CharField():数据库类型是varchar,必须要指定max_length参数值,这个是指字符的长度。
DateField():对应的数据库类型是date,用来表示日期,以下三个参数只能多选一,auto_now:每次保存对象时,自动设置该字段为当前时间(取值:Ture/False);auto_now_add:当对象第一次被创建时自动设置当前时间(取值:Ture/False);default:设置当前时间(取值:字符串格式时间如:'2022-11-7')。
DateTimeField(): 和上面DateField()参数一致,不过是这个精确到小时分钟秒。
FloatField():数据库类型是double,表示小数。
DecimalField():对应数据库中的decimal(x,y),使用小数表示该列的值,参数max_digits:表示位数总数,包括小数点后面的位数;decimal_places:表示小数点后的数字数量。
EmailField():字符串,用来存邮箱。
IntegerField():数据库类型中的int,使用整数。
ImageField():数据库类型是varchar(100),字段的值保存的是该图片的路径。
更多精彩请阅读官方文档:http://docs.djangoproject.com/en/2.2/ref/models/fields/#field-types
字段选项
通过字段选项,可以实现对字段的约束
允许出现多个字段选项,多个选项之间使用,隔开
primary_key:如果设置为Ture,表示该例为主键,如果指定一个字段为主键,则此数据库表不会创建id字段。
blank:设置为Ture时,字段可以为空;设置为False时,字段是必须填写的。
null:如果设置为True,表示该列值允许为空;默认为False。
default:设置所在列的默认值,如果字段选项null=False建议添加此项。
db_index:如果设置为Ture,表示为该列增加索引。
unique:如果设置为Ture,表示该字段在数据库中的值必须是唯一(不能重复出现)。
db_column:指定列的名称,如果不指定的话则采用属性名作为列名。
verbose_name:设置此字段在admin界面上的显示名称。
希望本篇文章对你有所帮助