关系
多对一 ForeignKey
多对多 ManyToManyField
中间人
如果简单的多对多不能满足需求,例如想对两个实体的关系进行进一步的描述:
用户 和 群组 是典型的多对多的关系
可以增加用户何时加入群组的字段,而这一字段是描述关系的
在定义ManyToManyField时可通过设置through来使用中间人
中间人需要设置两个外键到 用户 群组
一对一
model继承
1、只想父类中放一些子类的共同信息,父类不会被独立得用 -- 抽象继承
2、针对已有模型派生
3、只在python层面改变,不改模型
抽象继承
在类的meta中增加了abstract=True,该类则为抽象父类
对于他的子类,属性都会继承,可以重载,可以设置为None来移除
对于meta,如果子类没有定义meta则使用父类的meta(会自动设置abstract=False),否则需要显式继承meta
在抽象父类中定义关系型字段,如related_name和related_query_name时需注意
一般继承
会自动创建一个一对一的关系
对于meta,子类不会继承,但如果子类未定义ordering属性或get_latest_by属性则会使用父类的属性
不能重载父类的字段
代理模式
在类的meta中增加了proxy=True即可
派生出的类不会真正构造
这种方式和使用数据库已经存在的表的方式类似(设置managed=False):
但是会自动保持同步
多表继承
只继承第一个表的Meta
不能重载父类的字段
网友评论