Django: сгенерированный Django sql запрос вызывает ошибку - PullRequest
0 голосов
/ 24 марта 2012

Обновленный вопрос:

Django дает мне следующий SQL-запрос:

SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."username" = %s  args=('andrew',);

Если я выполняю SQL-запрос в командной строке postgresql, я получаю следующую ошибку:

ERROR:  syntax error at or near "%"
LINE 1: ..." FROM "auth_user" WHERE "auth_user"."username" = %s  args=(...
                                                             ^

Однако, когда я немного изменяю оператор, я получаю точный результат из postgresql.

SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."username" = 'andrew';

Неправильно ли создан Django запрос?


Привет, Stackoverflow, люди,

Очень простой код, который сводит меня с ума:

Я хочу извлечь информацию о пользователе из user_auth с помощью

user = get_object_or_404(User, pk = request.user.pk)

Тем не менее, я получаю сообщение об ошибке в Django:

'NoneType' object does not support item assignment

Когда я проверяю запрос sql и выполняю его в командной строке psql, psql также выдает мне сообщение об ошибке, которое заставляет меня думать, что утверждение может быть неверным.

PSQL заявление:

SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."id" = %s ; args=(7,)

Почему в выражении WHERE написано% s? Идентификатор пользователя не является строкой.

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

Дополнительное объяснение

Я использую пакет django_social_auth для аутентификации пользователя. Пользователь будет перенаправлен на сайт панели мониторинга после того, как 3-я часть очистит учетные данные, поэтому я предполагаю, что request.user - это не None.

Полный возврат

Environment:


Request Method: GET
Request URL: http://login.test.com:8000/profile/dashboard/

Django Version: 1.3.1
Python Version: 2.7.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.gis',
 'django.contrib.messages',
 'django.contrib.markup',
 'django.contrib.staticfiles',
 'django.contrib.flatpages',
 'django.contrib.humanize',
 'guardian',
 'easy_thumbnails',
 'userena',
 'userena.contrib.umessages',
 'south',
 'django_extensions',
 'debug_toolbar',
 'social_auth',
 'djangoratings',
 'about',
 'apps.profiles',
 'apps.map',
 'apps.contact',
 ]
Installed Middleware:
['django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.doc.XViewMiddleware',
 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware']


Traceback:
File "/Users/neurix/Development/test/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/Users/neurix/Development/test/test/apps/profiles/views.py" in dashboard
  35.     extra_context['username'] = user.username

Exception Type: TypeError at /profile/dashboard/
Exception Value: 'NoneType' object does not support item assignment

views.py

...
31: print "user: %s" %(request.user.pk)
32: user = get_object_or_404(User, pk = request.user.pk)
33:
34: 
35: extra_context['username'] = user.username
36: if user.first_name:
37:     extra_context['name'] = user.first_name
...

1 Ответ

1 голос
/ 24 марта 2012

Может быть, это request.user None?

if request.user is not None:
    user = get_object_or_404(User, pk = request.user.pk)
...