模型
class JobInfo(models.Model):
"""招聘信息"""
STATUS_CHOICES = (
(0, "进行中"),
(1, "已完成")
)
job_title = models.CharField(verbose_name="岗位名称", max_length=50)
job_status = models.SmallIntegerField(verbose_name="状态", choices=STATUS_CHOICES, default=0)
......
序列化器
class JobInfoSerializer(serializers.ModelSerializer):
"""招聘信息序列化器"""
class Meta:
model = JobInfo
fields = "__all__"
获取到的数据
{
"id": 4,
"job_status": 0,
"job_title": "java开发工程师",
"job_salary": "15~20K",
"experience": "3~5年",
......
}
这显然不是我们想要的,我们想要的状态是:进行中或者已完成
补充:
- 模型中choice接收一个元组(保证值不可变),同理每一个选项也是由一个元组(value,display_name)构成。显而易见,display_name就是要在页面中展示的。
- 对于配置类choice参数的字段,django提供了get_xxx_display()的方法来获取要显示的内容。
- 比如说实例一个Jobs对象job,则如示job.job_status = value,user.get_job_status _display() = display_name,通过属性取value,通过 get_属性_display()方法取display_name。
修改序列化器
class JobInfoSerializer(serializers.ModelSerializer):
"""招聘信息序列化器"""
job_status = serializers.SerializerMethodField()
class Meta:
model = JobInfo
fields = "__all__"
def get_job_status(self, obj):
return obj.get_job_status_display()
再次获取数据
{
"id": 4,
"job_status": "进行中",
"job_title": "java开发工程师",
"job_salary": "15~20K",
"experience": "3~5年",
......
}
参考资料
django restframework choice 自定义输出数据
Django模型中字段属性choice使用