Django模型类继承默认字段和重写

2024-10-01 15:44:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图继承类模板,这样我的所有模型都有特定的默认字段,并且所有模型都有一些函数的默认覆盖,比如save_model()

如果我这样做,我会得到覆盖,但是必须手动设置元数据,比如db_table。。。在

class ModelExtension(models.Model):
    altered_by = models.CharField(max_length=64)

class SomeModel(ModelExtension):
    class Meta:
        db_table = 'app_somemodel'
    fields = models.CharField()
    ...

有没有办法让这种继承权正常运作?到目前为止,我要么要做额外的工作来弥补这种方法的缺点,要么我被MRO错误所困扰


Tags: 数据函数模型模板dbmodelmodelssave
2条回答

什么是MRO错误?你读过关于模型继承的django文档吗?您可以有抽象基类、多表继承或代理模型。在

http://docs.djangoproject.com/en/1.2/topics/db/models/#abstract-base-classes

您所做的是一个多表继承-有一个隐藏的OneToOneField连接您的两个模型。我不知道你为什么认为你需要指定的db表-不应该。在

如果您永远不会有裸类ModelExtension的对象,那么您需要抽象基类。在本例中,您将abstract=True放入Meta部分,然后基类中的所有字段都添加到子类的表中。医生比我在这里解释得更好。在

我经常发现自己开始用一种方法来做,然后随着我对我的数据库结构的更多思考而来回翻转几次。。。。在

如果您只想在不更改字段的情况下向模型添加新的功能,请使用proxy model!在

相关问题 更多 >

    热门问题