如何通过字符串标识列名? Django的/蟒蛇

时间:2013-11-08 20:43:28

标签: python django

我正在编写一个基本函数,它接受三个参数,request,field和user_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”所在的字符串。当然,字符串不能放在那里。

那么我怎样才能实现一个与此完全相同的函数并返回一个结果呢?

谢谢!

1 个答案:

答案 0 :(得分:4)

这可以使用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