在 Django 视图中动态获取显示名称?

Swe*_*dar 1 python django django-models django-views

我有一个模型叫这样的人

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
Run Code Online (Sandbox Code Playgroud)

之后,我尝试在我的视图中生成 CSV 文件

我可以循环遍历我需要的所有字段,然后像这样动态访问值

getattr(person_object, field_name)
Run Code Online (Sandbox Code Playgroud)

然而,这会返回“a”、“b”等。

我知道我可以使用 访问显示名称get_FOO_display(),其中 foo 是字段的名称。但是,由于字段的检索是动态发生的,有没有办法动态访问字段的显示名称?无需绑定函数

Wil*_*sem 6

您可以传递给该函数:get_fieldname_displaygetattr

getattr(person_object, 'get_{}_display'.format(field_name))()
Run Code Online (Sandbox Code Playgroud)

或者您可以使用该methodcalleroperator

from operator import methodcaller

mygetter = methodcaller('get_{}_display'.format(field_name))

result = mygetter(person_object)
Run Code Online (Sandbox Code Playgroud)