【问题标题】: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):
...
但如果您想为项目中的多个模型构建通用接口,抽象类解决方案会更好