第3章 Django框架模型
3.1 认识模型
3.1.1 Django模型的作用
3.2 模型使用入门
3.2.1 定义模型
3.2.2 设计模型代码
步骤: 1、调用django.db模块导入models对象 2、定义一个继承自models.Model的类作为模型 3、类中的属性为数据库中的数据项(数据列)
3.2.3 使用模型
3.3 Django模型字段
3.3.1 字段的类型
在Django模型定义中,字段类型均派生自Field类的实例。Django框架的中Field类是一个抽象类,专门用于定义数据库表的列表项。
3.3.2 字段的选项
3.3.3 关联关系字段----外键(一对多关系)
** 以另一个关系的外键作主关键字的表被称为主表,具有此外键的表为主表的从表**
class ForeignKey(to,on_delete,**options)
参数to表示要关联的类 参数on_delete表示删除操作时的级联关系 可选参数**options
3.3.4 关联关系字段----一对一关系
class OneToOneField(to,on_delete,**options)
3.3.5 关联关系字段----多对多关系
class ManyToManyField(to,**options)
必须设置to位置的选项
3.3.6 自定义模型字段
3.4 Meta类
使用内部的Meta类来给模型赋予元数据
3.5 Django模型属性与方法
3.5.1 模型属性
3.5.2 模型方法
3.5.3 重写之前定义的模型方法
如save()方法和delete()方法等,可以通过super().save(…)调用父类方法来重写
3.6 Django模型继承
3.6.1 什么是模型继承
3.6.2 抽象基类
注意: 1、抽象基类不能作为普通Django模型使用,不生成数据表 2、从抽象基类继承来的字段可以被其他字段或值重写,或者可使用"None"标识符进 行删除
3.6.3 Meta继承
子类中Meta类的定义: : class Meta(父类名.Meta): :: …
3.6.4 related_name和related_query_name属性
3.6.5 多表继承
层次结构中每个模型都是一个单独的模型,每个模型指向分离的数据表,可被独立查询和创建 在继承关系中,子类和父类之间通过一个自动创建的OneToOneField连接
3.6.6 Meta和多表继承
若子类重新定义Mata类时没有指定ordering属性或get_latest_by属性,子类会从父类中继承这些属性
3.6.7 继承和反向关系
3.6.8 代理模型
应用场景:只是修改模型的Python级行为(如修改默认管理器或者添加一个新的方法) 目标:为原模型创建一个代理 特点: 1、可以创建、删除或更新代理模型的实例,全部数据会存储成像使用原模型一样的形式。 2、在设计时可以修改代理默认的模型排序和默认管理器,不需要修改原模型 如何声明:使用代理模型时,可以像普通模型一样声明,将Meta类的proxy属性设置为True
特点2: 1、一个代理模型必须继承自一个非抽象模型类,不能继承自多个非抽象模型类 2、一个代理模型可以继承任意数量的抽象模型类 3、一个代理模型也可以继承任意数量的代理模型(只需共享同一个非抽象父类)
特点3: 1、如果没有在代理模型中指定模型管理器,默认会从父类模型中继承 2、如果在代理模型中指定了管理器,会成为默认的管理器,同时父类中定义的管理器仍然是可用的
3.6.9 代理模型继承和未托管模型
3.6.10 多重继承
同时继承多个父类模型 两种方法: 1、显式使用AutoField方法 2、在公共祖先中存储AutoField
3.7 通过包管理模型
|