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.

一直追溯到CCD_ 2。

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

根据文档,AppConfigready()方法是在填充注册表时调用的,这意味着模型也被加载,因此引用模型应该不是问题。

正如文档中所指出的那样,这行代码在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

最新更新