1. 单表继承:
在单表继承中,所有的模型都存储在同一张数据库表中,而且每个模型有一个唯一的标识符来区分不同类型的对象。这种方式是通过使用一个额外的字段来存储模型类型的。
from django.db import models
class Animal(models.Model):
name = models.CharField(max_length=100)
legs = models.IntegerField()
class Mammal(Animal):
hair_color = models.CharField(max_length=50)
class Bird(Animal):
wingspan = models.FloatField()
在上述例子中,Mammal 和 Bird 继承自 Animal,它们共享 name 和 legs 字段。在数据库中,Animal 表包含了所有三种动物的字段,而 Mammal 和 Bird 只包含它们自己的特定字段。
2. 多表继承:
多表继承使用多个表来存储继承关系,每个表对应于模型层次结构中的一个级别。这种方式的一个特点是每个模型都有一个单独的表,子模型通过外键关系与父模型关联。
from django.db import models
class Animal(models.Model):
name = models.CharField(max_length=100)
legs = models.IntegerField()
class Mammal(models.Model):
animal = models.OneToOneField(Animal, on_delete=models.CASCADE)
hair_color = models.CharField(max_length=50)
class Bird(models.Model):
animal = models.OneToOneField(Animal, on_delete=models.CASCADE)
wingspan = models.FloatField()
在上述例子中,Mammal 和 Bird 通过 OneToOneField 与 Animal 关联,每个模型都有自己的表。
在使用模型继承时,请根据具体的需求选择合适的方式。需要注意的是,模型继承会影响数据库表的结构和查询性能,因此在设计模型时需要谨慎考虑。
请注意,具体的实现和用法可能会因 Django 版本而异,因此建议查看与您正在使用的 Django 版本相对应的[官方文档](https://docs.djangoproject.com/)以获取更详细和最新的信息。
转载请注明出处:http://www.zyzy.cn/article/detail/7134/Django