我有模型实例User。
用户与另外两个模型model1
和model2
具有两个1对1关系。
我不想做user.model1
,而是想做这样的事情:
model_name = 'model1'
user.__dict__[model_name]
我发现我可以通过以下方式做到这一点
user.__dict__['_wrapped'].__dict__['_' + model_name + '_cache]
但是我觉得很丑,还有另一种方法吗?
答案 0 :(得分:4)
您可以为此使用getattr(..)
[Python-doc]:
getattr(user, 'model1')
getattr(..)
是内置的Python函数,getattr(x, 'y')
对应于x.y
(请注意,在getattr(..)
的情况下,第二个参数是字符串)。
如果对象(此处为user
)具有属性model1
,它将引发一个AttributeError
。 getattr(..)
也可以采用三个参数:第三个参数用作默认值,因此,如果属性getattr(user, 'non_existing_attribute', None)
不存在,None
将返回non_existing_attribute
。 / p>