Django,如何动态访问对象的相关模型

时间:2018-07-27 09:44:45

标签: python django

我有模型实例User。

用户与另外两个模型model1model2具有两个1对1关系。 我不想做user.model1,而是想做这样的事情:

model_name = 'model1'
user.__dict__[model_name]

我发现我可以通过以下方式做到这一点

user.__dict__['_wrapped'].__dict__['_' + model_name + '_cache]

但是我觉得很丑,还有另一种方法吗?

1 个答案:

答案 0 :(得分:4)

您可以为此使用getattr(..) [Python-doc]

getattr(user, 'model1')

getattr(..)是内置的Python函数,getattr(x, 'y')对应于x.y(请注意,在getattr(..)的情况下,第二个参数是字符串)。

如果对象(此处为user)具有属性model1,它将引发一个AttributeErrorgetattr(..)也可以采用三个参数:第三个参数用作默认值,因此,如果属性getattr(user, 'non_existing_attribute', None)不存在,None将返回non_existing_attribute。 / p>