在子类的 Meta 类中设置 proxy = True 即可使用代理继承。
使用代理继承后,不会给子类创建一张新的数据表,而是会和父类共用一张,当我们需要为类添加方法时候,可以使用代理继承。
例子:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class MyPerson(Person):
class Meta:
# 设置为代理继承
proxy = True
def say_hello(self):
print('hello i am ' + self.first_name)
上面例子中,Person 和 MyPerson 操作同一张数据表,所不同的是 MyPerson 对象有了一个新的 say_hello 方法。
>>> mp = Myperson.objects.get(id=1)
>>> mp.say_hello()
hello i am John
你也可以使用代理继承给 model 定义不同的默认排序设置。比如,我们希望 Person 对象使用默认排序,同时又创建一个 OrderedPerson 在需要排序的情景下使用:
class OrderedPerson(Person):
class Meta:
ordering = ["last_name"]
proxy = True