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

问题描述 投票:0回答:4

在 Django 中,我可以这样做:

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

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

test['name']

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

test._meta.get_field_by_name('name')

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

有什么想法吗?

django django-models
4个回答
140
投票

您可以使用Python内置的

getattr()
函数:

getattr(test, 'name')

17
投票

假设 name 是实例上的一个属性 test

getattr(test, 'name')
应该返回相应的值。或者
test.__dict__['name']

您可以在此处阅读有关

getattr()
的更多信息:Python getattr 函数


14
投票

其他答案仍然有效,但现在您可以使用 Django 的 _meta.get_field() 来完成此操作。

test._meta.get_field('name')

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


6
投票

在 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
© www.soinside.com 2019 - 2024. All rights reserved.