Access Django model's fields using a string instead of dot syntax?
In Django, I can do this:
test = Test.objects.get(id=1)
test.name
I want to be able to access the properties using dynamically generated strings, like this:
test['name']
or, any other syntax using a string. I tried
test._meta.get_field_by_name('name')
but this returns the field itself and not the value.
Any ideas?
Solution 1:
You can use python's built in getattr()
function:
getattr(test, 'name')
Solution 2:
Assuming name is an attribute on your instance test getattr(test, 'name')
should return the corresponding value. Or test.__dict__['name']
.
You can read more about getattr()
here: http://effbot.org/zone/python-getattr.htm
Solution 3:
Other answers still stand, but now you can do this using Django's _meta.get_field().
test._meta.get_field('name')
Note that the Model _meta API has begun its official support and documentation as of 1.8, but has been distributed and used in prior versions before its official documentation.