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

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

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

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

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

One Solution collect form web for “Как переопределить значение по умолчанию для поля модели из абстрактного базового класса”

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

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

  • Однозначное наследование в Django
  • обновить базу данных django, чтобы отразить изменения в существующих моделях
  • Как кэшировать модель Django в памяти
  • Ошибка Django syncdb: одна или несколько моделей не проверяли
  • Django: Пример общих отношений с использованием структуры contenttypes?
  • Модели Django (1054, «Неизвестный столбец в списке полей»)
  • Satchmo clonesatchmo.py ImportError: невозможно импортировать имя execute_manager
  • Сортировка набора QuerySet Django с помощью свойства (а не поля) модели
  • Python - лучший язык программирования в мире.