Django覆盖模型子类的创建方法

时间:2016-09-15 04:46:40

标签: python django

我正在寻找正确的方法来覆盖子类的create()方法。

基本上我这样做:

class Base(models.Model):
    field1_base = models.IntegerField()
    def __init__(self, field1_base):
        # LOGICS
        self.field1_base = field1_base

class A(Base):
    field2_sub = models.IntegerField()
    def __init__(self, field2_sub, field1_base):
        # LOGICS
        self.field2_sub = field2_sub
        super(A, self).__init__(field1_base)

A(field2_sub=1, field1_base=2)

但是我们无法覆盖模型的__init__()方法。

我只想在基类的方法中保留一些字段。

是否有使用create()方法执行此操作的正确方法?

当然我可以自定义create Base类的方法,但是我想要的是在创建A的同时调用Base.create和A.create,这使得情况与{{ 3}}

1 个答案:

答案 0 :(得分:1)

我会做这样的事情。

class Base(models.Model):
    field1_base = models.IntegerField()

    def initialize(self, *args, **kwargs):
        self.field1_base = kwargs['field1_base']

    @classmethod
    def create(cls, *args, **kwargs):
        # LOGICS
        self = cls()
        self.initialize(*args, **kwargs)
        return self

class A(Base):
    field2_sub = models.IntegerField()

    def initialize(self, *args, **kwargs):
        super(A, self).initialize(*args, **kwargs)
        self.field2_sub = kwargs['field1_base']

A.create(field2_sub=1, field1_base=2)