美文网首页
django inheritance

django inheritance

作者: Dream_lover | 来源:发表于2016-12-28 20:20 被阅读0次

Abstract base classes

在元数据中设置Meta中设置 abstract=True ,这个model将用于创建任何数据表.当它被作为基类时.他的字段添加进这些子类当中,
注意:
1.如果抽象类和基类有相同名称的字段会产生一个异常.
2.基类不会产生一个数据表或者生成一个管理器,也不能被直接实例化调用.

from django.db import models
class Base(models.Model): 
        m2m = models.ManyToManyField(OtherModel, related_name="%(app_label)s_%(class)s_related")
        class Meta: 
                abstract = True
class ChildA(Base):
       pass
class ChildB(Base): 
        pass

Meta inheritance
django允许声明各种meta属性,如果子类没有声明,他将自动继承父类的,也可以继承然后扩展

class Meta(father_class.Meta):
       db_table = 'child_info'

db_table将意味着所有的子类(那些没有指定自己的Meta)将使用同一数据库,这肯定不会是你想要的。

Multi-table inheritanceDjango支持的第二种model继承是多表继承,在继承结构中每个model都是独立的。都对应着自己的数据库表,可以进行独立的查询等操作。继承关系实际是子model和每个父model之间的关系(通过自动创建OneToOneField)

from django.db import model
class Place(models.Model): 
    name = models.CharField(max_length=50) 
    address = models.CharField(max_length=80)
class Restaurant(Place): 
    serves_hot_dogs = models.BooleanField(default=False) 
    serves_pizza = models.BooleanField(default=False)

所有Place的字段都可以在Restaurant中使用,虽然数据存放在不同的数据表中

Proxy models
当使用多表继承时一个新的数据表model会在每一个子类中创建,这是因为子model需要存储父mdoel不存在的一些数据字段。但有时只需要改变model的操作行为,可能是为了改变默认的管理行为或添加新的方法。

这时就应该使用代理模式的继承:创建原始model的代理。你可以创建一个用于 create, delete 和 update的代理model,使用代理model的时候数据将会真实保存。这和使用原始model是一样的,所不同的是当你改变model操作时,不需要去更改原始的model。

代理模式的声明和正常的继承声明方式一样。你只需要在Meta class 中定义proxy为True就可以了。

相关文章

  • django inheritance

    Abstract base classes 在元数据中设置Meta中设置 abstract=True ,这个mod...

  • Inheritance

    继承是swift中类区别于结构体和枚举等其他类型的主要原因。 子类可以调用或者重写父类的属性、方法和附属脚本。可以...

  • Inheritance

    Overriding Overriding Property Getters and Setters We can...

  • 1-多态

    1. 继承-inheritance 表达了实现的复用。inheritance 是从代码复用角度提出的概念,和类型没...

  • Swift - Inheritance

    Inheritance 类能添加属性观察者到继承属性中,无论是存储还是计算属性 某个类没有继承于其他类,就是基类 ...

  • Inheritance Note

    Hypernym and Hyponym We use the word hyponym for the oppo...

  • 52 - Inheritance

  • model inheritance

    model的继承是和普通的python类继承相似的,只是最初的基类是应该从models.Model中派生出来 种类...

  • protected inheritance

    Accessibility of Derived-to-Base conversion in protected ...

  • class inheritance

    When a class inherits from another class.The inherited cl...

网友评论

      本文标题:django inheritance

      本文链接:https://www.haomeiwen.com/subject/cliimttx.html