django的模型多态
时间: 2024-10-08 11:03:38 浏览: 10
Django框架的模型多态(Model Polymorphism),也被称为单一表继承(Single Table Inheritance,简称STI)或多态模型,是一种设计模式,允许你在不创建多个数据库表的情况下,在一个统一的表中存储不同类型的数据。在Django中,你可以通过继承一个抽象基类(Abstract Base Class,ABC)并在其中定义一些通用字段和行为,然后让每个具体的模型(称为Concrete Models)继承这个基类。
每个继承自抽象基类的具体模型可以有自己的特定属性和方法,同时共享部分通用的信息。在查询时,Django会根据实际使用的模型类型动态地解析数据,使得代码能够处理多种类型的实体,而不需要进行硬编码的条件判断。
例如:
```python
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
class Content(models.Model):
content_type = models.ForeignKey('contenttypes.ContentType', on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
# 定义抽象基类
class Animal(models.Model):
# 共享字段
name = models.CharField(max_length=50)
# 具体模型
class Dog(Animal):
breed = models.CharField(max_length=50)
class Cat(Animal):
color = models.CharField(max_length=50)
```
在这个例子中,`Dog`和`Cat`都继承了`Animal`,它们有自己的特有字段,并共享`name`字段。当你需要保存一个动物时,可以直接保存到`Content`表中,Django会在内部处理多态性。