以前在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.
一直追溯到CCD_ 2。
我应该如何将其迁移到Django 1.7?
根据文档,AppConfig
的ready()
方法是在填充注册表时调用的,这意味着模型也被加载,因此引用模型应该不是问题。
正如文档中所指出的那样,这行代码在ready()
中仍然无效:
不能在定义应用程序的模块中导入模型配置类,但可以使用getmode()访问模型按名称分类
因此,从models.py
中删除User._meta.get_field_by_name('email')[0]._unique=True
,并在应用程序配置中执行以下操作:
class AccountsConfig(AppConfig):
name = 'modules.accounts'
def ready(self):
self.get_model('User')._meta.get_field_by_name('email')[0]._unique=True