我有模型实例User。

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

model_name = 'model1'
user.__dict__[model_name]


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

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


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

最佳答案

您可以为此使用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

关于python - Django,如何动态访问对象的相关模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51555207/

10-09 17:18