DRF:如何获得选择的详细名称?
DRF : how to get the verbose name for choices?
假设我有这个模型:
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,
)
如果我使用 DRF 公开 year_in_school 字段的值,我会得到选择的第一个参数,例如:"FR".
如何公开第二个参数 "Freshman" 而不是 "FR"?
您可以使用模型的 get_FOO_display
方法作为序列化程序字段的来源:
year_in_school = serializers.CharField(source='get_year_in_school_display')
除了@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
假设我有这个模型:
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,
)
如果我使用 DRF 公开 year_in_school 字段的值,我会得到选择的第一个参数,例如:"FR".
如何公开第二个参数 "Freshman" 而不是 "FR"?
您可以使用模型的 get_FOO_display
方法作为序列化程序字段的来源:
year_in_school = serializers.CharField(source='get_year_in_school_display')
除了@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