您可以看到此功能更新用户字段,其中字段取决于GET变量。
def update_p(request):
if request.method == "GET":
field = request.GET.get("field", "")
value = request.GET.get("value", "")
result = Users.objects.raw("SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1", [field, request.session['user_id']])[0]
if result:
result = getattr(result, field)
result = value
result.save()
return HttpResponseRedirect("/blog/loggedin/profile/")
之后
if result:
是我感到困惑的地方。我收到了错误
AttributeError: 'unicode' object has no attribute 'save'
我不知道为什么我会收到错误,但希望它对你们所有人都不言自明。如何防止错误,或者有更好的方法来执行此功能?
感谢您的帮助。
答案 0 :(得分:2)
通过执行result = getattr(result, field)
,您已将result
变为'unicode'
值而不是User
对象。
你可能想写:
if result:
setattr(result, field, value)
result.save()
答案 1 :(得分:0)
我认为你的字符串连接不正确
"SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1", [field, request.session['user_id']]
应该是
"SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1", %(field, request.session['user_id'])
例如
>>> a = "SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1", ["username", "ABC"]
>>> a
('SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1', ['username', 'ABC'])
>>> a = "SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1" %("username", "ABC")
>>> a
'SELECT id, username FROM blog_users WHERE id = ABC LIMIT 1'
同样有效的SQL会要求ABC在引号“ABC”
中