2014-04-13 36 views
11

我一直在使用[django-registration](https://bitbucket.org/ubernostrum/django-registration),现在我已经开始使用django 1.7b1,这里是错误,我得到了下面复制的错误。它正在从Django的注册提出在models.py与Django的Django注册兼容性问题1.7

try: 
    from django.contrib.auth import get_user_model 
    User = get_user_model() 
except ImportError: 
    from django.contrib.auth.models import User 

,似乎它正在升起,因为get_user_model()被调用之前应用注册表已准备就绪。我不确定这是否兼容性问题,如果是,是否有一个简单的解决方法?如果不是,你能帮我确定我做错了什么吗?

RuntimeError: App registry isn't ready yet. 
File "/Users/nima/pe-dev/manage.py", line 9, in <module> 
    execute_from_command_line(sys.argv) 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/core/management/__init__.py", line 427, in execute_from_command_line 
    utility.execute() 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/core/management/__init__.py", line 391, in execute 
    django.setup() 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/__init__.py", line 21, in setup 
    apps.populate(settings.INSTALLED_APPS) 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/apps/registry.py", line 106, in populate 
    app_config.import_models(all_models) 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/apps/config.py", line 190, in import_models 
    self.models_module = import_module(models_module_name) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
File "/Library/Python/2.7/site-packages/registration/models.py", line 15, in <module> 
    User = get_user_model() 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/contrib/auth/__init__.py", line 136, in get_user_model 
    return django_apps.get_model(settings.AUTH_USER_MODEL) 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/apps/registry.py", line 187, in get_model 
    self.check_ready() 
File "/Library/Python/2.7/site-packages/Django-1.7b1-py2.7.egg/django/apps/registry.py", line 119, in check_ready 
    raise RuntimeError("App registry isn't ready yet.") 

回答

25

请勿使用PyPI提供的django注册。它不支持Django 1.7,它似乎永远不会。回购维护者已退位,该项目似乎无人维护。

有Github上提供维护叉已在Django 1.7行之有效对我来说:

https://github.com/macropin/django-registration

这可以从PyPI将作为Django的注册 - 终极版。

https://pypi.python.org/pypi/django-registration-redux/

您可以安装使用PIP:

pip install django-registration-redux

+0

您先生 - 和github用户macropin - 救了我。 –

+1

它的点子:pip安装django-registration-redux –

+1

感谢提示@VisgeanSkeloru。我已经更新了答案,以反映更简单的安装过程。 – ptevans

2

This note解决您的问题。

我想导入用户的首选方法是:

from django.conf import settings 
User = settings.AUTH_USER_MODEL 

编辑:

貌似这个问题已经注意到,但项目管理是难以大约进行更改。 link。这是Django 1.7更新中的一个更大的问题。

我会说你可以:(1)分叉回购并自己做出更改,或者(2)在pip安装后在你的站点包文件夹中进行更改。如果您将其推送到另一台服务器并使用requirements.txt进行安装,后一版本将无法正常工作。请注意,如果您使用requirements.txt执行选项1,则需要将其指向您的repo而不是Django注册。

+0

这正是我想太多。问题在于,我在导入时并未在代码中调用'get_user_model()',它正在[django-registration]中调用(https://bitbucket.org/ubernostrum/django-registration/src/8f242e35ef7c004e035e54b4bb093c32bf77c29f /registration/models.py?at=default#cl-15)应用程序。那么这是否意味着django-registration与1.7b不兼容? – Nima

+0

是啊,似乎回购所有者不再维护它,这是一个耻辱。我不确定这里有什么正确的解决方案。我不认为'User = settings.AUTH_USER_MODEL'会完成这项工作,因为'settings.AUTH_USER_MODEL'返回一个字符串并且使用'get_model()'来获得实际的模型类在这里是不可能的。 – Nima

+0

如果您刚刚删除了get_user_model()部件并导入了用户,该怎么办?目前看起来像这样: '尝试:from django.contrib.auth import get_user_model User = get_user_model() ',除了ImportError: from django.contrib.auth。模型导入用户' 如果删除前四行: 'from django.contrib.auth.models import User' – Alex