Как переопределить значение по умолчанию для поля модели из абстрактного базового класса - PullRequest
28 голосов
/ 16 июня 2011

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

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 Ответ

30 голосов
/ 17 июня 2011

Вы можете сделать это следующим образом:

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

Я сделал это один или два раза. Это работает, потому что поле в сообщении отличается от поля в BaseMessage. Однако я сомневаюсь, что это рекомендуется ;-) Это во многом зависит от того, как в настоящее время работают внутренние компоненты django, поэтому нет гарантии, что это будет работать вечно.

...