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

时间:2012-02-21 14:27:58

标签: django django-models

在Django中,我可以这样做:

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

我希望能够使用动态生成的字符串访问属性,如下所示:

test['name']

或使用字符串的任何其他语法。我试过了

test._meta.get_field_by_name('name')

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

有什么想法吗?

4 个答案:

答案 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