【问题标题】:Django 1.7 - Modifying a model's propertyDjango 1.7 - 修改模型的属性
【发布时间】:2014-09-29 21:00:58
【问题描述】:

以前在 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?

【问题讨论】:

    标签: django django-1.7


    【解决方案1】:

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

    正如文档中指出的那样,该行代码仍然无效,因为它在 ready() 中:

    您不能在定义应用程序的模块中导入模型 配置类,但您可以使用 get_model() 访问模型 按名称分类

    因此,从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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 2017-01-14
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      相关资源
      最近更新 更多