Добрый день!
Такая проблема, решил перетащить проект с 1.7. на 1.8.
Дело в том, что авторизация пользователя проходит OAuth на другом сервере, для этого была сделана фейк-модел RemoteApiUser в которой в качестве id/pk использовался токен, полученный при авторизации.
В 1.7.* работает все великолепно, а вот в 1.8.5 получаю следующее
Traceback (most recent call last):
File "/usr/lib/python3.4/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/root/django/envs/wallet/lib/python3.4/site- packages/django/contrib/staticfiles/handlers.py", line 63, in __call__
return self.application(environ, start_response)
File "/root/django/envs/wallet/lib/python3.4/site- packages/django/core/handlers/wsgi.py", line 189, in __call__
response = self.get_response(request)
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/core/handlers/base.py", line 218, in get_response
response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/core/handlers/base.py", line 261, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/views/debug.py", line 97, in technical_500_response
html = reporter.get_traceback_html()
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/views/debug.py", line 383, in get_traceback_html
c = Context(self.get_traceback_data(), use_l10n=False)
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/views/debug.py", line 328, in get_traceback_data
frames = self.get_traceback_frames()
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/views/debug.py", line 501, in get_traceback_frames
'vars': self.filter.get_traceback_frame_variables(self.request, tb.tb_frame),
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/views/debug.py", line 234, in get_traceback_frame_variables
cleansed[name] = self.cleanse_special_types(request, value)
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/views/debug.py", line 189, in cleanse_special_types
if isinstance(value, HttpRequest):
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/utils/functional.py", line 225, in inner
self._setup()
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/utils/functional.py", line 365, in _setup
self._wrapped = self._setupfunc()
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/contrib/auth/middleware.py", line 22, in <lambda>
request.user = SimpleLazyObject(lambda: get_user(request))
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/contrib/auth/middleware.py", line 10, in get_user
request._cached_user = auth.get_user(request)
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 167, in get_user
user_id = _get_user_session_key(request)
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 59, in _get_user_session_key
return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY])
File "/root/django/envs/wallet/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 969, in to_python
params={'value': value},
django.core.exceptions.ValidationError: ["Значение 'TBQqn1Cpz4aO1UNeDgKzmgvtW1ygTS' должно быть целым числом."]
Токен пишется в стандартный SESSION_KEY и при запросе передается в RemoteAuthenticationBackend в качестве ключа и по токену достается юзер с сервера авторизации.
Может кто подскажет как решить проблему, кроме как переворачивать всю авторизацию с ног на голову.
Сервер авторизации работает на стандартно oauth2_toolkit.
P.S. Посмотрел... Проблема довольно массовая (была), но Django закрывает все репорты с пометками типа "это ваши проблемы". Я так понимаю, что данная проблема еще связана с изменение Model._meta API в ветке 1.8
Updated 9 Oct. 2015, 17:20 by Shaman.