首页 > 技术文章 > Django学习总结- ③

lzw19951020 2018-09-12 20:23 原文

对象属性与继承关系:

对象属性

1. 显示属性
   - 开发者手动定义的,直接看的到的
2. 隐式属性
   - 系统根据需求,自动创建的对象
   - objects 它是model.Manager对象
   - 当我们手动创建了Manager对象的时候,它就不会自动生成了

Manager

1. 创建模型
   - 自己书写方法创建
   - 创建对象的时候可以对字段指定默认值
2. get_queryset 获取结果集的方法
   - get_queryset().filter().exclude

模型继承

1. 默认模型就是允许继承的,但是默认的继承处理方式不是很合理
   - 默认在父类中定义的字段会存在父类的表中,子类的数据通用部分会存在父表中,子类特有数据会在子表中,子类通过外键进行级联
   - 默认方式比较垃圾,效率比较低
   - 数据库优化策略
     - 避免IO
     - 避免关系过多级联
2. 开发中,需要将父类抽象化,在元信息中使用abstract=True
   - 抽象化的父类不会再数据库生成表了
   - 子类会将父类中的通用数据,复制到子表中

django_migration

1. 作用,用来记录数据库迁移的
2. 每次迁移都会在数据库中进行一个记录
3. 每次生成迁移的时候,都会去库中进行检索上一次的迁移记录
4. 如果我们复用数据库的时候,需要删除迁移记录

模型关系

1. 1:1
   - OneToOneField
   - 通过外键实现
   - 对外键添加唯一约束
   - 人和身份证
   - 在身份证中声明关系(身份证关联到人)
   - 默认情况下,删除人,关联的身份证会自动被删除
   - 删除身份证,人不受影响的
   - 主表 (Person) 从表 (IDCard),声明关系的表就是从表
   - 级联数据获取
     - 从获取主,  关系是直接声明的,它是一个显性属性
     - 主获取从, 关系字段是隐性属性,对象.关系模型名 (小写)
2. 1:M
   - 级联数据获取
     - 从获取主,(多获取一),显性属性,直接获取
     - 主获取从, 一获取多,隐性属性,和model.Manager同源
       - 也支持查询的各种过滤
       - 对象.关联对象_set. all
       - all ,exclude,last,first,filter,get
3. N:M
   - 底层是通过两个外键实现,两个外键存在关系表中

- UNIQUE(XX,YY) 存储的数据不能同时相等   1,1  1,2  2,1 2,2 
- 删除数据的时候会删除自己的数据和关系表中的数据
- 级联数据获取
  - 通过商品获取购买者(从获取主),也是一个集合,类似model.Manager 也可以进行filter,exclude,all
  - 通过购买者获取所有商品(从主获取从),隐性属性  对象.关联对象_set. all  fliter exclude

1. on_delete
   - CASECADE 默认,默认删除级联数据
   - PROTECT 保护模式,当存在级联数据的时候,删除会抛出,保护异常,不存在级联数据的时候,是允许删除的
   - SETXXX
     - NULL			值本身允许为空
     - DEFAULT                字段本身有默认值
     - 具体值                     具体值
   
   

homework

1. 模型关系搞清

 

推荐阅读