【问题标题】:Inherit python object in Django model在 Django 模型中继承 python 对象
【发布时间】:2016-12-15 09:59:26
【问题描述】:

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

例子是:

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

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

myC 继承自 Model 并使其抽象化对我来说是不可能的,甚至更多。所以我想知道,myM 的表格会是什么样子(如果我想要做的事情是可能的)。

【问题讨论】:

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


    【解决方案1】:

    是的,您可以从常规类继承模型。例如,为您的模型创建一些 mixin。
    每次保存模型时,此 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):
         ...
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 2015-09-29
      相关资源
      最近更新 更多