1

以前在 Django 1.6 及更早的版本中,我曾经执行以下操作以使User' 的 email 属性唯一:

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?

4

1 回答 1

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
于 2014-09-29T21:00:58.437 回答