Django官方文档Model层之继承
2015-10-18 12:33
363 查看
[b]模型继承[/b]
一.抽象基类继承:
抽象基类:
抽象基类主要是作为一个信息集合,用在许多模型拥有共同信息的场合,本质上只是一个存储信息的容器,数据库中不创建表结构,不能单独使用,子类通过继承来获得父 亲基类的字段和元类型数据,通过设置Meta类的abstract=True属性来声明为抽象基类,否则,不会自动变为抽象基类,现举例如下:
属性继承:内部元类Meta
若子类没有声明自己的内部元类,它会继承父类的Meta属性,若子类想要使用扩展父类的Meta属性,可以子类化父基类的Meta属性,举例如下:
抽象基类中外键和多对多关系字段中的related_name选项的注意事项:
理解的有点模糊,待写。
二.多表格继承
parent和child每一个模型都是一个独立的模型,都占用数据库表格,他们之间通过一个自动创建的OneToOne字段进行链接,举例如下:
属性:父亲内部Meta类
子模型继承父亲的内部Meta类没有意义,所有的Meta属性都应用到了父亲模型中,再次在子模型中应用Meta类会引起冲突行为。因此一个子模型不访问父亲的Meta类属性,有一些例外,例如:ordering和get_lasted_by可以在子模型中进行设置
继承和反向查找:当涉及到外键和多对多字段时与模型的related_names选项有关,需要认真研究。
三.代理模型
四.多继承
一.抽象基类继承:
抽象基类:
抽象基类主要是作为一个信息集合,用在许多模型拥有共同信息的场合,本质上只是一个存储信息的容器,数据库中不创建表结构,不能单独使用,子类通过继承来获得父 亲基类的字段和元类型数据,通过设置Meta类的abstract=True属性来声明为抽象基类,否则,不会自动变为抽象基类,现举例如下:
from django.db import models class CommonInfo(models.Model): name = models.CharField(max_length=100) age = models.PositiveIntegerField() class Meta: abstract = True #声明为抽象基类 class Student(CommonInfo): #继承了基类的字段属性 home_group = models.CharField(max_length=5)
属性继承:内部元类Meta
若子类没有声明自己的内部元类,它会继承父类的Meta属性,若子类想要使用扩展父类的Meta属性,可以子类化父基类的Meta属性,举例如下:
from django.db import models class CommonInfo(models.Model): # ... class Meta: abstract = True ordering = ['name'] class Student(CommonInfo): # ... class Meta(CommonInfo.Meta): #子类化父亲的Meta属性 db_table = 'student_info'
抽象基类中外键和多对多关系字段中的related_name选项的注意事项:
理解的有点模糊,待写。
二.多表格继承
parent和child每一个模型都是一个独立的模型,都占用数据库表格,他们之间通过一个自动创建的OneToOne字段进行链接,举例如下:
from django.db import models class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) class Restaurant(Place): #继承 serves_hot_dogs = models.BooleanField(default=False) serves_pizza = models.BooleanField(default=False)
属性:父亲内部Meta类
子模型继承父亲的内部Meta类没有意义,所有的Meta属性都应用到了父亲模型中,再次在子模型中应用Meta类会引起冲突行为。因此一个子模型不访问父亲的Meta类属性,有一些例外,例如:ordering和get_lasted_by可以在子模型中进行设置
class ChildModel(ParentModel): # ... class Meta: # 清除父亲的排序效果 ordering = []
继承和反向查找:当涉及到外键和多对多字段时与模型的related_names选项有关,需要认真研究。
三.代理模型
四.多继承
相关文章推荐
- winform快速开发平台 -> 工作流组件(仿GooFlow)
- 终于看到golang的深入解读了
- Amazon OA2准备——LRU cache
- STL中algorithm里的查找
- STL中algorithm里的查找
- poj1323,poj2586贪心容易题
- Django开发教程 第二节 URL配置
- Chapter 5 Probabilistic Analysis and Randomized Algorithms
- 【BZOJ】【P4281】【ONTAK2015】【Związek Harcerstwa Bajtockiego】【题解】【倍增】
- Chapter 1 The Role of Algorithms in Computing
- google在线测试练习2
- 使用Google地图
- Golang学习笔记:语言规范二
- hdu-1055----树染色问题color a tree(贪心)
- 9 Special Pythagorean triplet - Project Euler
- 基于Golang的游戏服务器框架cellnet开发日记(二)
- 对golang服务器开发模式的一些思考
- Django1.8特性
- Golang学习笔记:语言规范之声明与作用域
- LSGO软件技术团队对外技术交流