Django提供了如下3种常用的模型(models)继承方式,可使你的代码更简便和灵活。今天小编我就带你看下在什么情境下使用这些模型继承方式以及它们之间的区别。
1. 抽象模型继承(abstract model)
2. 多表模型继承(multi-table inheritance)
3. 代理模型(proxy model)
抽象模型继承(abstract model)
假如我们有如下两个模型Article(文章)和Course(课程)模型。它们的模型中有很多共同的字段,比如作者、标题、创建日期和更新日期。这样写会造成大量的代码重复,一个更好的方式是提取两个模型共同的字段建立一个父类抽象模型(abstract model),再建立子类模型去继承父类。
class Article(models.Model):
owner = models.ForeignKey(User, related_name='articles_related',
on_delete=models.CASCADE)
title = models.CharField(max_length=250)
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
class Course(models.Model):
owner = models.ForeignKey(User, related_name='courses_related',
on_delete=models.CASCADE)
title = models.CharField(max_length=250)
description = models.TextField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)<