ORM模型基础:模型介绍和配置;常见的字段类型(文本,数字,日期等);模型同步;模型的元数据;外键关联,复合类型
一,模型介绍及配置
1.掌握Django中ORM的配置
- 项目配置 (setting.py)
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '5432', } }
- 安装依赖
二,常见的ORM字段类型
1.了解ORM中常见的字段类型
文本:
- CharField,TextField —— 字符串,文本
- FileField,ImageField —— 文件,图片
- FilePathField —— 文件路径
- EmailField —— 邮件地址
- URLField —— URL地址
数字:
- IntegerField —— 整数
- SmallIntegerField —— 整数
- BigIntegerField —— 整数
- BooleanField —— 布尔值(1,0)
- Float Field,DecimalField —— 小数
日期:
- DateField —— 日期
- TimeField —— 时间
- DateTimeField —— 日期时间
特殊类型:
- OneToOneField —— 一对一关联
- ForeignKey —— 外键关联
- ManyToManyField —— 多对多关联
- GenericForeignKey —— 复合关联
模型基类:
django.db.models.Field
2.掌握ORM中字段类型的配置选项
- 每个类型都有可选参数,部分类型有必传参数
- 参数传递是无序的(需要写参数的名称)
- 一般情况下,第一个参数不指定名称
- null,blank —— 是否为Null,空值
- verbose_name 大多数模型的第一个参数,特殊类型除外 作用:方便阅读,即:该字段的含义
- default —— 不填写改字段时的默认值
- primary_key,unique —— 主键,唯一索引
- db_column —— 数据库表中对应字段名称
- help_text —— 帮助文字
- choices —— 可供选择的选项,如:性别的选项
- get_FOO_display() —— 展示choices对应的值
3.了解常用字段类型中的参数传递
CharField
- max_length —— 最大长度(必传)
- 相关类型:EmailField,URLField
DateTimeField
- auto_now —— 更新时间为记录更改的时间(非必传)
- auto_now_add —— 记录创建的时间(非必传)
三,模型的创建
1.掌握模型设计的技巧
2.掌握ORM模型代码的编写
3.掌握常见ORM模型字段类型的使用
manage.py startapp accounts
models.py
from django.db import models
# Create your models here.
class User(models.Model):
""" 用户模型 """
name = models.CharField('姓名', max_length=64)
sex = models.CharField('性别', max_length=1, choices=(
('1', '男'),
('0', '女')
), default='1')
age = models.PositiveIntegerField('年龄', default=0)
username = models.CharField('用户名', max_length=64, unique=True)
password = models.CharField('密码', max_length=256)
remark = models.CharField('备注信息', max_length=64, null=True, blank=True)
created_at = models.DateTimeField('创建时间', auto_now_add=True)
update_at = models.DateTimeField('修改时间', auto_now=True)
四,模型同步migrate
- python manage.py check
- python manage.py makemigrations
- python manage.py migrate
五,模型的元数据
1.掌握Django中元编程的技巧
.元数据的描述:在Python模型中再写一个类,使用Meta类来表示;是对模型的补充说明
class Meta:
verbose_name = '用户基础信息'
verbose_name_plural = '用户基础信息'
db_table = 'oauth_user'
- db_table —— 模型映射的数据库表的名称
- ordering —— 指定数据表的默认排序规则
- verbose_name —— 供编程查看的名称字段,同时也是给django自带后台管理模块命名中文
- abstract —— 抽象类 抽象类不会生成对应的数据库表
.proxy代理类:有功能代理上面类中所,且可以对它的功能进行扩充,相当于继承
class Manager(User):
class Meta:
proxy = True
def xxx(self):
pass
2.掌握在模型中配置数据库的表名称
3.掌握抽象选项的作用及使用场景
4.了解代理选项的作用及应用场景
六,外键关联模型
1.了解数据库中常见关联关系
- 一对一
- 一对多
- 一对多
2.掌握一对一关系的实现
- OneToOneField(to, on_delete,parent_link=False, **options)
举例:用户信息进行分表
用户基本信息 <-- 用户详细信息
3.掌握一对多关系的实现
- ForeignKey(to, on_delete, **options)
举例:用户提问,问题表加上ForeignKey
用户(1) <-- 问题(n)
4.掌握多对多关系的实现
- ManyToManyField(to, **options)
- 举例:收藏问题
用户(n) ---- 问题(n)
5.类型的参数选项
- to----关联的模型 (必传)
- 模型类
- 模型类(字符串)
- self(外键关联关联到自己的情况下)
- on_delete ----- 删除选项(必传递)
- CASCADE:关联删除
- PROTECT:受保护,不允许被删除
- SET_NULL:设置为None,需要添加选项null=True
- SET_DEFAULT:设置为默认值,需要添加选项default
- SET():传参设置值
- DO_NOTHING:什么也不做
- related_name:是否需要反向引用,反向引用的名称
- related_query_name:反向引用的名称
六,复合类型(django特有)
1.理解复合类型的使用场景
思考:景点评论,订单评论,旅游攻略评论如何设计ORM模型精简又便于维护
这至少要4个表,如果再加旅游攻略的评价,又要多两个表
2.掌握复合类型的模型设计
- ContentType——类容模型
- ForeignKey(ContentType)——关联符合模型
- GenericForeignKey——关联模型
- GenericRelation——反向关联
3.了解复合类型设计原理
- 关键点:ContentType
七,章节总结
- ORM模型分析,设计
- ORM模型代码的编写,模型同步
- ORM外键关联,复合类型
- 数据库配置