Django получает атрибут значения поля (внешнего ключа) - PullRequest
0 голосов
/ 08 июня 2018

Мне нужно получить атрибут (код) из внешнего ключа (Option) для каждого поля в модельном объекте (Jacket).

Очевидно, что я ошибаюсь.Возвращает только идентификатор поля.Мне нужен атрибут значения поля 'code'.

Шаблон:

{% for field, value in jacket.get_fields %}

<tr>
  <td>
    {{field}}
  </td>
  <td>
    {{value}}
  </td>
</tr>
{% endfor %}

models.py

def get_fields(self):
    return [(field.name, field.value_to_string(self)) for field in Jacket._meta.fields]

1 Ответ

0 голосов
/ 08 июня 2018

Вы на правильном пути, но вам нужно использовать 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 методе.

...