django模型的自动继承

时间:2017-07-13 11:33:09

标签: python django database inheritance

我有一个django项目,它有这样的模型。

class Part(models.Model):
  attr1 = models.CharField(max_length=50)
  attr2 = models.CharField(max_length=50)

class Document(models.Model):
  part = models.ForeignKey(Part)
  attr1 = models.CharField(max_length=50)

等等。
单个模块中有很多模型,每个模型都需要一个具有相同属性和一个或多个附加属性的独立模型。
如果不手工编写每一堂课,我该怎么做呢?
修改
好的问题有点不清楚 我想在数据库中为每个模型创建一个2个独立的表,如上面所示,另一个带有一个附加列
编辑2
当我提出

时,我想我明白了
import inspect
import sys

for name, obj in inspect.getmembers(sys.modules[__name__]):
    if inspect.isclass(obj) and issubclass(obj, models.Model) and hasattr(obj, 'Meta') and inspect.isclass(obj.Meta) and not (
                hasattr(obj.Meta, 'abstract') and obj.Meta.abstract):
        globals()["Edit" + name] = type("Edit" + name, (obj,), {'fu': 'bar'})

在models.py的底部,我为此文件中定义的每个模型获得了一个新模型 因此,我会为EditPartEditDocument个类提供属性fu

1 个答案:

答案 0 :(得分:0)

你可以继承的abstract model怎么样?

class BaseModel(models.Model):
    attr1 = models.CharField(max_length=50)

    class Meta:
        abstract = True


class Part(BaseModel):
    attr2 = models.CharField(max_length=50)


class Document(BaseModel):
    part = models.ForeignKey(Part)