0

如您所见,此函数更新用户字段,该字段取决于 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'

我不知道为什么我会收到错误,但希望它对你们所有人都是不言自明的。我怎样才能防止错误,或者有更好的方法来完成这个功能?

谢谢你的帮助。

4

2 回答 2

2

通过这样做result = getattr(result, field),您已经变成result了一个'unicode'值而不是一个User对象。

你可能打算写:

if result:
    setattr(result, field, value)
    result.save()
于 2013-11-13T22:17:11.927 回答
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”

于 2013-11-13T22:23:30.113 回答