如何通过字符串标识列名?django/python

如何通过字符串标识列名?django/python,python,django,Python,Django,我正在编写一个基本函数,它包含三个参数:请求、字段和用户id。 其思想是,当您传递信息时,函数返回的结果将是列(由参数“field”标识)、行(由参数“user_id”标识)。 这是我的职责: def get_user_field(request, user_id, field): result = Users.objects.raw("SELECT id, %s FROM blog_users WHERE id = %s", [field, user_id])[0] #retu

我正在编写一个基本函数,它包含三个参数:请求、字段和用户id。 其思想是,当您传递信息时,函数返回的结果将是列(由参数“field”标识)、行(由参数“user_id”标识)。 这是我的职责:

def get_user_field(request, user_id, field):
    result = Users.objects.raw("SELECT id, %s FROM blog_users WHERE id = %s", [field, user_id])[0]
    #return result.??????
我不知道怎么做,就是用返回相应列的内容替换那些问号。如果我尝试

return result.field
它将传递“field”所在的字符串。当然,绳子不能放在那里

那么,我如何实现一个函数,它的工作原理与此非常相似,并返回一个结果呢


谢谢

这可以通过
getattr
Python内置实现:

return getattr(result, field)
但最好完全不同:

def get_user_field(request, user_id, field):
    return User.objects.filter(id=user_id).values_list(field, flat=True)[0]
或者,考虑到用户不存在的可能性:

def get_user_field(request, user_id, field):
    result = User.objects.filter(id=user_id).values_list(field, flat=True)
    if result:
        return result[0]
    else:
        return None # or raise an exception or whatever you like

这可以通过Python内置的
getattr
Python来完成:

return getattr(result, field)
但最好完全不同:

def get_user_field(request, user_id, field):
    return User.objects.filter(id=user_id).values_list(field, flat=True)[0]
或者,考虑到用户不存在的可能性:

def get_user_field(request, user_id, field):
    result = User.objects.filter(id=user_id).values_list(field, flat=True)
    if result:
        return result[0]
    else:
        return None # or raise an exception or whatever you like

我的Django有点生锈,但它很可能是
getattr(result,field)
。工作得很完美。非常感谢。我的Django有点生锈,但它很可能是
getattr(result,field)
。工作得很完美。非常感谢。