以前在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?
根据文档,在填充注册表时调用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |