Models and Databases 1.Models

字段的类型决定了:

数据库表的字段类型
form中默认的html
在admin和form中最小程度的数据校验

字段的选项:null blank choices default help_text primary_key unique verbose_name

关系

除可创建正向关系外还可创建逆向关系,此外可创建到还未定义的model上的关系

多对一 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

不能重载父类的字段

你可能感兴趣的:(Models and Databases 1.Models)