在Django模型中继承python对象

时间:2016-12-15 09:59:26

标签: python django inheritance django-models django-inheritance

我试图理解,如果可以继承django模型中的常规python类。我的想法是,我需要一个通用的接口,用于模型和系统的另一部分(与mongo一起使用)。

示例是:

class myC(object):
  def __init__(self):
    self.f = "test"

class myM(myC, models.Model):
  name = models.CharField(max_length=50)

myC从模型继承并使其成为抽象对我来说真的不可能,甚至更多。所以我想知道,myM的表格会是什么样的(如果我想做的话是可能的话)。

1 个答案:

答案 0 :(得分:0)

是的,您可以从常规课程继承您的模型。例如,为您的模型创建一些mixins 每次保存模型时,此mixin都会将/字段添加到url字段:

class ModelURLSaveMixin(object):

    def save(self, *args, **kwargs):
        if not self.url.startswith('/'):
           self.url = '/' + self.url
        if not self.url.endswith('/'):
            self.url = self.url + '/'
        super(ModelURLSaveMixin, self).save(*args, **kwargs)


 class MyModelWithUrlField(ModelURLSaveMixin, models.Model):
     ...

但是如果你想为你的项目中的几个模型构建通用接口,那么抽象类解决方案会更好