我有模型实例User。
用户与另外两个模型model1
和model2
具有两个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/