Django的1.7 - 修改模型的属性(Django 1.7 - Modifying a mod

2019-10-21 01:56发布

此前在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.

一路追踪回到User._meta.get_field_by_name('email')[0]._unique=True

我如何把这个迁移到Django的1.7?

Answer 1:

根据文档 , 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


文章来源: Django 1.7 - Modifying a model's property