Получить отображаемое имя динамически в представлении Django? - PullRequest
1 голос
/ 13 апреля 2020

У меня есть модель с именем person, подобная этой

class person(models.Model):
    choice1 = ("a","DisplayNameA", "b", "DisplayNameB")
    choice1_field = models.CharField(max_length=1, choices=choice1)
    choice2 = ("c","DisplayNameC", "d", "DisplayNameD")
    choice2_field = models.CharField(max_length=1, choices=choice2)
    # and so on, there are many fields like these

После этого я пытаюсь сгенерировать файл CSV в своих представлениях

Я могу l oop через все поля Мне нужно, а затем получить доступ к значениям динамически, как это

getattr(person_object, field_name)

Однако это возвращает «a», «b» и т. Д.

Я знаю, что могу получить доступ к отображаемому имени, используя get_FOO_display(), где foo - имя поля. Однако, поскольку извлечение поля происходит динамически, есть ли способ динамического доступа к отображаемому имени поля? Без необходимости связывать функции ?

1 Ответ

2 голосов
/ 13 апреля 2020

Вы передаете get_<i>fieldname</i>_display в функцию getattr:

getattr(person_object, <b>'get_{}_display'.format(field_name)</b>)()

или вы можете использовать methodcaller operator пакет :

from operator import methodcaller

mygetter = methodcaller(<b>'get_{}_display'.format(field_name)</b>)

result mygetter(person_object)
...