DRF:如何获得选择的详细名称?

Aur*_*ien 5 django django-serializer django-rest-framework

假设我有这个模型:

class Student(models.Model):
    YEAR_IN_SCHOOL_CHOICES = (
        (FR, 'Freshman'),
        (SO, 'Sophomore'),
        (JU, 'Junior'),
        (S, 'Senior'),
    )
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )
Run Code Online (Sandbox Code Playgroud)

如果我使用 DRF 来公开 year_in_school 字段的值,我会得到选择的第一个参数,例如:“FR”。

如何公开第二个参数“Freshman”而不是“FR”?

nev*_*ner 8

您可以使用模型的get_FOO_display方法作为序列化程序字段的来源:

year_in_school = serializers.CharField(source='get_year_in_school_display')
Run Code Online (Sandbox Code Playgroud)


det*_*hos 5

除了@neverwalkaloner 答案(如果出于某种原因您更喜欢以不同方式执行),您还可以通过覆盖to_representation序列化程序的方法来实现相同的行为,以使用get_FOO_display实例的方法:

def to_representation(self, instance):
    ret = super().to_representation(instance)
    ret['year_in_school'] = instance.get_year_in_school_display()
    return ret
Run Code Online (Sandbox Code Playgroud)