Django-registration与Django 1.7的兼容性问题

11

我一直在使用 [django-registration] (https://bitbucket.org/ubernostrum/django-registration),现在我开始使用django 1.7b1,下面是我遇到的错误。该错误来自于django-registration中的models.py

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.")
2个回答

25

您先生 - 以及 Github 用户 macropin - 救了我。 - Andrew E
1
它位于pip上:pip install django-registration-redux - Visgean Skeloru
1
感谢 @VisgeanSkeloru 的建议。我已经更新了答案,以反映更简单的安装过程。 - ptevans
由于使用像这样的维护分支是合理的解决方案,因此现在这是被接受的答案。 - Nima

2

这篇说明 解决了你的问题。

我认为导入User的首选方法是:

from django.conf import settings
User = settings.AUTH_USER_MODEL

编辑:

看起来这个问题已经被注意到了,但项目管理员在进行更改方面有些困难。 链接。 这是Django 1.7更新中的一个更大的问题。

我会建议你:(1)fork该repo并自己进行更改,或者(2)在pip安装后在您的网站包文件夹中进行更改。如果您将其推动到另一个服务器并使用requirements.txt进行安装,则后者版本将无法正常工作。请注意,如果您选择option 1并使用requirements.txt,则需要将其指向您的repo而不是Django-registration。


这正是我所想的。问题在于我没有在导入时调用 get_user_model(),它是在 django-registration 应用程序中被调用。这是否意味着 django-registration 与 1.7b 不兼容? - Nima
是的,看起来存储库所有者不再维护它了,这很遗憾。我不确定正确的解决方案是什么。我认为 User = settings.AUTH_USER_MODEL 不会起作用,因为 settings.AUTH_USER_MODEL 返回一个字符串,在这里使用 get_model() 获取实际模型类是不可能的。 - Nima
如果您删除了 get_user_model() 部分并导入 User,会发生什么呢?当前代码如下:try: from django.contrib.auth import get_user_model User = get_user_model() except ImportError: from django.contrib.auth.models import User如果您删除前四行代码:from django.contrib.auth.models import User - Alex
1
在这里查看Russell的回复(https://groups.google.com/forum/#!msg/django-developers/lmT1JxsWHPo/N2V9U5SN9gwJ)。看起来模型可以采用对模型的字符串引用。因此,`settings.AUTH_USER_MODEL`应该有效。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接