2014-09-29 52 views
1

以前,我用來做以下,使User的電子郵件特有的屬性:的Django 1.7 - 在Django 1.6及更早版本修改模型的屬性

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?

回答

5

根據documentationready()方法AppConfig在填充註冊表時調用,這意味着模型也被加載,因此引用模型不應該是一個問題。

這行代碼仍然是因爲它是在ready()雖然,如文檔中指出無效:

You cannot import models in modules that define application configuration classes, but you can use get_model() to access a model class by name

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