Django Model三种继承模型详解
在 Django 中每个 Model 都是一个 Pyhton 类,前文之前提到过 Model 继承自 django.db.models.Model。通过类之间的继承 Django 会对自定义的 Model 自动添加了两个属性分别是 id 和 objects。
在 Model 不指定主键的情况下,Django 会通过 AutoFiled 字段类型将 id 设置为默认自增主键。这里就不加赘述了,在本节我们将从另一个属性 objects 讲起,然后再深入了解 Model 的继承模型。
1. objects查询管理器
objects 是 Manager 类的实例对象,被称为查询管理器,是数据库查询的入口。每一个 Django Model 都至少有一个 Manager 实例,可以通过自定义创建 Manager 以实现对数据库的定制访问,这里我们讲到 Manager 类,它也同样定义在 models 模块中,引入方式如下:
django.db.models.Manager
2. Model的继承模型
Django Model 的继承与 Python 类的继承是一样的,只是 Django 要求所有自定义的 Model 都必须继承自 django.db.models.Model。在 Django 中 Model 之间有三种继承模型,它们分别是抽象基类、多表继承以及代理模型。
1) 抽象基类
抽象类继承的作用是将子表中通用的字段聚合在一起,并将这些字段统一定义在抽象基类中,避免于重复定义这些字段。抽象基类的定义通过在模型的 Meta 中定义属性 abstract=True 来实现。示例如下:
from django.db import models
class AbstractBase(models.Model):
id = models.AutoField()
content = models.CharField(max_length=100)
username = models.CharField(max_length