我知道我可以使用getattr(mymodel, myvar)
从模型中获取变量属性。但是,如果我想使用django的双下划线表示法从相关模型中获取属性,则不起作用。
我将如何完成以下内容?
mymodel.get('relation__relation_attr')
谢谢!
答案 0 :(得分:2)
Reduce是你的朋友:
#we take a model:
m=Material.objects.all()[0]
#now I navigate to some attr:
m.uf.mp.nom
#we get:
u'Programació multimèdia i dispositius mòbils'
#I write attr path as string:
str="uf__mp__nom"
#I invoke reduce to get attr value through path:
reduce( getattr, [ m ] + str.split("__" ) )
#we get same result, txan txan!!
u'Programació multimèdia i dispositius mòbils'
另一个例子:
>>> m.uf.mp.cicle.nom
u'Desenvolupament d aplicacions multiplataforma'
>>>
>>> str="uf__mp__cicle__nom"
>>>
>>> reduce( getattr, [ m ] + str.split("__" ) )
u'Desenvolupament d aplicacions multiplataforma'
编写自己的函数来封装它。