Проблема совместимости регистрации Django с django 1.7

Я использовал [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.")

person Nima    schedule 13.04.2014    source источник


Ответы (2)


Не используйте регистрацию django, доступную в PyPI. Он не поддерживает Django 1.7 и, похоже, никогда не будет. Сопровождающий репо отрекся от престола, и проект не поддерживается.

На Github есть сервисная вилка, которая хорошо зарекомендовала себя с Django 1.7:

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

Он доступен в PyPI как django-registration-redux.

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

Вы можете установить с помощью pip:

pip install django-registration-redux

person ptevans    schedule 14.09.2014
comment
Вы, сэр, и пользователь github macropin спасли меня. - person Andrew E; 19.09.2014
comment
Это на пипе: pip install django-registration-redux - person Visgean Skeloru; 22.09.2014
comment
Спасибо за совет @VisgeanSkeloru. Я обновил ответ, чтобы отразить гораздо более простой процесс установки. - person ptevans; 23.09.2014
comment
Поскольку использование такой поддерживаемой вилки является разумным решением, теперь это принятый ответ. - person Nima; 23.09.2014

Это примечание касается вашей проблемы.

Я думаю, что предпочтительный способ импорта пользователя:

from django.conf import settings
User = settings.AUTH_USER_MODEL

РЕДАКТИРОВАТЬ:

Похоже, эта проблема была отмечена, но администратор проекта затрудняется внести изменения. ссылка . Это большая проблема с обновлениями в Django 1.7.

Я бы сказал, что вы можете либо: (1) разветвить репо и внести изменения самостоятельно, либо (2) внести изменения в папку пакетов вашего сайта после установки pip. Последняя версия не будет работать, если вы затем перенесете ее на другой сервер и установите с файлом requirements.txt. Обратите внимание, что если вы сделаете вариант 1 с файлом requirements.txt, вам нужно указать его на свое репо, а не на регистрацию Django.

person Alex    schedule 13.04.2014
comment
Я тоже именно так и думал. Проблема в том, что я не вызываю get_user_model() в своем коде во время импорта, он вызывается в файле django-registration. Значит ли это, что регистрация django несовместима с 1.7b? - person Nima; 15.04.2014
comment
Да, похоже, что владелец репо больше не поддерживает его, и это позор. Я не уверен, какое здесь правильное решение. Я не думаю, что User = settings.AUTH_USER_MODEL выполнит эту работу, поскольку settings.AUTH_USER_MODEL возвращает строку, а использование get_model() для получения фактического класса модели здесь невозможно. - person Nima; 15.04.2014
comment
Что, если вы просто удалите часть get_user_model() и импортируете пользователя? В настоящее время выглядит так: 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 - person Alex; 15.04.2014
comment
Ознакомьтесь с ответом Рассела здесь. Похоже, что модели могут принимать строковые ссылки на модели. Таким образом, settings.AUTH_USER_MODEL должен работать. - person Alex; 15.04.2014