Django 1.7 - 修改模型的属性

Azi*_*ari 1 django 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
Run Code Online (Sandbox Code Playgroud)

我正在迁移到Django 1.7,但此代码引发了以下错误:

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
Run Code Online (Sandbox Code Playgroud)

一直追溯到User._meta.get_field_by_name('email')[0]._unique=True.

我应该如何将其迁移到Django 1.7?

Azi*_*ari 5

根据文档,在填充注册表时调用ready()方法,AppConfig这意味着还加载了模型,因此引用模型应该不是问题.

ready()然而,正如文档中所指出的那样,那行代码仍然无效.

您无法在定义应用程序配置类的模块中导入模型,但您可以使用get_model()按名称访问模型类

因此,除去User._meta.get_field_by_name('email')[0]._unique=Truemodels.py做应用程式设定以下改为:

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

    def ready(self):
        self.get_model('User')._meta.get_field_by_name('email')[0]._unique=True
Run Code Online (Sandbox Code Playgroud)