在Django中,我可以这样做:
test = Test.objects.get(id=1)
test.name
我希望能够使用动态生成的字符串访问属性,如下所示:
test['name']
或使用字符串的任何其他语法。我试过了
test._meta.get_field_by_name('name')
但这会返回字段本身而不是值。
有什么想法吗?
答案 0 :(得分:85)
您可以使用python内置的getattr()
函数:
getattr(test, 'name')
答案 1 :(得分:12)
假设 name 是您实例上的属性 test getattr(test, 'name')
应该返回相应的值。或test.__dict__['name']
。
您可以在此处详细了解getattr()
:http://effbot.org/zone/python-getattr.htm
答案 2 :(得分:8)
其他答案仍然有效,但现在你可以使用Django的_meta.get_field()来做到这一点。
test._meta.get_field('name')
请注意,Model _meta API自1.8起已开始正式支持和documentation,但在其官方文档之前已在先前版本中分发和使用。
答案 3 :(得分:4)
在Python中,您通常可以访问具有 dict 方法的对象中的值。
假设你有这门课程:
class Dog(object):
def __init___(self, color):
self.color = color
然后我实例化它:
dog = Dog('brown')
所以我可以通过以下方式看到颜色:
print dog.color
我也可以通过以下方式看到颜色:
print dog.__dict__['color']
我可以设置颜色:
print dog.__dict__['color'] = 'green'
print dog.color
>>>green