使用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