代理继承

在子类的 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,075评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,985评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,848评论 25 709
  • 2017年8月23日 星期四 雨 “你,一切都挺好的吧”,眼前的男人半天挤出了一句话,这倒是符合他的性格,吴雨...
    安心喵喵喵阅读 558评论 2 3