2012-03-24 33 views
0

更新问题:的Django:Django的生成SQL查询导致错误

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',); 

如果我执行PostgreSQL的命令行SQL查询,我得到出现以下错误:

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生成的查询是否不正确?


嗨#1人,

很简单的代码,让我发疯:

我想

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

但是从中提取USER_AUTH用户信息,我得到一个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,) 

它为什么要说%S在WHERE语句?用户标识不是字符串。

我相信解决方案必须非常简单 - 但我可以找出问题所在。 谢谢你的帮助和建议!

我现在用的是django_social_auth包的用户认证附加说明。一旦第三部分清除凭证,用户将被引导到仪表板网站,因此我会假设request.user不是无。

完整回溯

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

'%s'是一个通用的占位符,并不表示字符串。尝试发布回溯。 – 2012-03-24 03:36:30

+0

你可以展示完整的追溯? – diegueus9 2012-03-24 04:41:24

+0

添加追溯。感谢您的帮助! – neurix 2012-03-24 05:22:35

回答

1

难道说request.user是无?

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