Вы на правильном пути, но вам нужно использовать getattr
в вашем экземпляре.
См. Этот пример:
>>> my_instance = MyModel.objects.first()
>>> field_names = [field.name for field in MyModel._meta.fields]
>>> print(field_names)
['id', 'title', 'created_by', 'created_on']
>>> for field_name in field_names:
... print('{field}: {value}'.format(field=field_name, value=getattr(my_instance, field_name)))
...
id: 1
title: My instance
created_by: user
created_on: 2018-06-08 06:58:26.927950
Используяgetattr
, вы можете извлечь значение из имени атрибута, это просто функция Python, которая работает с любым объектом.
В вашем случае вы должны использовать getattr
на self
,так как вы используете экземпляр Jacket в своем шаблоне.У вас могут возникнуть проблемы с отношениями. Предположим, у вас есть ManyToManyField
внутри вашей Jacket
модели, getattr
вернет объект RelatedManager
.Но вы можете справиться с этим на вашем get_fields
методе.