Как переопределить значение по умолчанию для поля модели из абстрактного базового класса

У меня есть код, который выглядит так:

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

    class Meta:
        abstract = True

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

и я хотел бы переопределить значение по умолчанию для поля is_public в модели сообщения, чтобы оно True для этой модели.

Я просмотрел некоторые соответствующие документы Django и ткнул вокруг объектов модели, но у меня возникли проблемы с поиском подходящего места для этого. Любые предложения?

Ответ 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, поэтому нет гарантии, что он будет работать навсегда.