2👍
✅
Reduce is your friend:
#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'
Another example:
>>> 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'
write your own function to encapsulate it.
Source:stackexchange.com