使用string而不是点语法来访问Django模型的字段?

在Django中,我可以这样做:

test = Test.objects.get(id=1) test.name 

我想能够使用dynamic生成的string访问属性,如下所示:

 test['name'] 

或者,使用string的任何其他语法。 我试过了

 test._meta.get_field_by_name('name') 

但是这会返回字段本身而不是值。

有任何想法吗?

你可以使用内置的getattr()函数的python:

 getattr(test, 'name') 

假设name是你的实例的一个属性, getattr(test, 'name')应该返回相应的值。 或者test.__dict__['name']

你可以在这里阅读更多关于getattr() : http : //effbot.org/zone/python-getattr.htm

其他答案仍然存在,但现在你可以使用Django的_meta.get_field()来做到这一点。

 test._meta.get_field('name') 

请注意,Model _meta API已经从1.8开始提供官方支持和文档 ,但在官方文档之前已经在之前的版本中分发和使用。

在Python中,通常可以访问具有字典方法的对象中的值。

假设你有这个类:

 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