一尘不染

如何从抽象基类覆盖模型字段的默认值

django

我有一些看起来像这样的代码:

class BaseMessage(models.Model):
    is_public = models.BooleanField(default=False)
    # some more fields...

    class Meta:
        abstract = True

class Message(BaseMessage):
    # some fields...

并且我想覆盖is_publicMessage模型中字段的默认值,使其True适用于该模型。

我已经浏览了一些相关的Django文档,并仔细查看了模型对象,但是我很难找到合适的位置进行此操作。有什么建议?


阅读 316

收藏
2020-03-29

共1个答案

一尘不染

你实际上可以按照以下步骤进行操作:

class BaseMessage(models.Model):
    is_public = models.BooleanField(default=False)
    # some more fields...

    class Meta:
        abstract = True

class Message(BaseMessage):
    # some fields...
Message._meta.get_field('is_public').default = True

我已经做了一两次。之所以有效,是因为Message上的字段与BaseMessage上的字段是不同的实例。但是,我怀疑是否建议使用它;-)它在很大程度上取决于Django内部的当前工作方式,因此无法保证它将永远有效。

分享改善这个答案

2020-03-29