Сайт администратора Django не может подключиться к базе данных - используется неверный движок mongodb - PullRequest
3 голосов
/ 14 июля 2011

Раньше сайт администратора работал для моего приложения django, но сейчас я просто не могу понять, в чем проблема.

Вкл. settings.py У меня есть конфигурация базы данных mongodb:

DATABASES = {
    'default': {
        'ENGINE': 'django_mongodb_engine', 
        'NAME': 'myapp', 
        'USER': 'username',
        'PASSWORD': '********'
        'HOST': 'myserver.com',          
        'PORT': '27157',
        'SUPPORTS_TRANSACTIONS': False,
    }
}

Я знаю, что эти настройки верны, потому что у меня уже есть некоторые представления, считывающие информацию из базы данных и отображающие ее. Так что я точно знаю, что мое приложение может подключаться к базе данных mongodb.

Я настроил urls.py, admin.py и settings.py для включения сайта администратора (и раньше он работал). Однако теперь, когда я пытаюсь получить к нему доступ, я просто получаю:

Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in wrapper
  214.                 return self.admin_view(view, cacheable)(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/utils/decorators.py" in _wrapped_view
  93.                     response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
  79.         response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in inner
  195.             if not self.has_permission(request):
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in has_permission
  148.         return request.user.is_active and request.user.is_staff
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/middleware.py" in __get__
  9.             request._cached_user = get_user(request)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/__init__.py" in get_user
  107.         user_id = request.session[SESSION_KEY]
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/base.py" in __getitem__
  47.         return self._session[key]
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/base.py" in _get_session
  195.                 self._session_cache = self.load()
File "/usr/local/lib/python2.6/dist-packages/mongoengine/django/sessions.py" in load
  26.             s = MongoSession.objects(session_key=self.session_key,
File "/usr/local/lib/python2.6/dist-packages/mongoengine/queryset.py" in __get__
  1151.         db = _get_db()
File "/usr/local/lib/python2.6/dist-packages/mongoengine/connection.py" in _get_db
  41.         _connection[identity] = _get_connection(reconnect=reconnect)
File "/usr/local/lib/python2.6/dist-packages/mongoengine/connection.py" in _get_connection
  33.             raise ConnectionError('Cannot connect to the database')

Exception Type: ConnectionError at /admin/
Exception Value: Cannot connect to the database

Я ввел некоторую отладочную информацию в mongoengine/connection.py и вижу, что параметры подключения, используемые для подключения к базе данных:

{'host': 'localhost', 'port': 27017}

, что означает, что он использует настройки соединения по умолчанию вместо настроек, предоставленных мной на settings.py. Есть идеи, что может быть причиной этого? Почему настройки базы данных не передаются на сайт администратора? Может быть, я забыл что-то сделать в конфигурации администратора?

EDIT:
Я следовал этим инструкциям , чтобы настроить мое приложение django для работы с базой данных mongodb. Я использую djangotoolbox и django-nonrel .

Только сейчас я понял, что двигатель mongodb, который должен использоваться, когда я устанавливаю 'ENGINE': 'django_mongodb_engine', является django-mongodb-engine , а не mongoengine . Но в трассировке стека я вижу, что он использует mongoengine. (django-mongodb-engine не зависит от mongoengine) Я предполагаю, что в представлениях используется правильный (и именно поэтому он работает), но администратор почему-то использует mongoengine?!?! Если я правильно понимаю, мое приложение не должно даже требовать mongoengine для работы. Он установлен только потому, что я экспериментировал с ним некоторое время назад.

Ответы [ 2 ]

1 голос
/ 19 июля 2011

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

У меня была строка SESSION_ENGINE = 'mongoengine.django.sessions' где-то в моем settings.py (в результате злой копии / прошлого) и это заставляло мое приложение использовать mongoengine вместо django-mongodb-engine.

0 голосов
/ 23 августа 2017

mongoengine не работает с Django-admin из-за внутренних соединений, выполняемых модулем администратора. Вы можете попробовать использовать не относительную версию Django, такую ​​как django-non-rel. Однако Django-non-rel больше не соответствует последней версии Django.

Взгляните на этот вопрос . django - новый пакет поддерживает подключение административного модуля к MongoDB, а также позволяет иметь встроенные документы внутри моделей Django.

...