Django 1.7 - Изменение свойства модели

Ранее в Django 1.6 и более ранних версиях я делал следующее, чтобы сделать атрибут электронной почты User уникальным:

class User(AbstractUser):
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

User._meta.get_field_by_name('email')[0]._unique=True

Я перехожу на Django 1.7, но этот код вызывает следующую ошибку:

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

проследить весь путь до User._meta.get_field_by_name('email')[0]._unique=True.

Как мне перенести это на Django 1.7?


person Aziz Alfoudari    schedule 29.09.2014    source источник


Ответы (1)


Согласно документации, ready() метод AppConfig вызывается при заполнении реестра. что означает, что модели также загружены, поэтому ссылки на модели не должны быть проблемой.

Однако эта строка кода по-прежнему недействительна, как в ready(), как указано в документации:

Вы не можете импортировать модели в модули, которые определяют классы конфигурации приложения, но вы можете использовать get_model() для доступа к классу модели по имени.

Поэтому удалите User._meta.get_field_by_name('email')[0]._unique=True из models.py и вместо этого выполните следующие действия в конфигурации вашего приложения:

class AccountsConfig(AppConfig):
    name = 'modules.accounts'

    def ready(self):
        self.get_model('User')._meta.get_field_by_name('email')[0]._unique=True
person Aziz Alfoudari    schedule 29.09.2014