如何查询django模型的变量属性?

时间:2014-07-30 18:46:04

标签: django django-models

我知道我可以使用getattr(mymodel, myvar)从模型中获取变量属性。但是,如果我想使用django的双下划线表示法从相关模型中获取属性,则不起作用。

我将如何完成以下内容?

mymodel.get('relation__relation_attr')

谢谢!

1 个答案:

答案 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'

编写自己的函数来封装它。