Django之面向对象ORM

Django模型层ORM的一个强大之处是对于模型的支持,该技术将python面向对象的编程方法与数据库面向关系表的数据结构有机地结合。Django支持三种风格的模型继承。

抽象类继承:父类继承自model.Model,但不会在底层数据库生成相应的数据表。父类属性列存储在其子类的数据表中。

抽象类继承的作用是在多个表有若干相同的字段时,可以使开发者将这些字段统一定义在抽象基类中,免于重复定义这些字段。抽象基类的定义通过在模型的Meta中定义属性abstract=True来实现。

多表继承:多表继承的每个模型类型都在底层数据库生成相应的数据表管理数据。

多表继承技术中,无论是父表还是子表都会用数据库中相对应的数据表维护模型数据,父类中的字段不会重复地在多个子类的相关数据表中进行定义。从某种意义上讲,多表继承才是真正面向对象的ORM技术。多表继承不需要多余的关键字。在Django内部通过在父模型和子模型之间建立一对一关系来实现多表继承技术。

注:在多表继承时,崽子类实例中通过小写的父类名字可以引用父类的实例。

代理模型继承:父类用于在底层数据库中管理数据表;而子类不定义数据列,只定义查询数据集的排序方式等元数据。

在前两种继承模型中子类模型都有实际存储数据的作用;而代理模型继承中子类之用于管理父类的数据,而不实际存储数据。代理模型继承通过在子类的Meta中定义proxy=True属性来实现。例如在子类模型中ordering = ["-父类模型字段名"]管理倒序的父类数据。使用代理模型继承的原因是子类中新的特性不会影响父类模型及其已有代码的行为。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章