Раньше сайт администратора работал для моего приложения 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 для работы. Он установлен только потому, что я экспериментировал с ним некоторое время назад.