0
点赞
收藏
分享

微信扫一扫

django choices 字段处理返回枚举值

祈澈菇凉 2022-09-20 阅读 67

1.代码model设计

class RoleInfo(models.Model):
choices=[('0','普通角色'),('1',"管理员")]
status_enum= [('0','禁用'),('1',"启用")]

role_name = models.CharField(max_length=50)
role_type = models.CharField(choices=choices,max_length=10)
status = models.CharField(choices=status_enum,max_length=10)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
class Meta:
db_table = "tbl_role_info"
ordering = ["-create_time"]

  

 

2.serializer 设计:

class RoleSerializer(serializers.ModelSerializer):

role_type_value = serializers.SerializerMethodField()
status_value = serializers.SerializerMethodField()

def get_role_type_value(self,obj):
return obj.get_role_type_display()
def get_status_value(self,obj):
return obj.get_status_display()

class Meta:
model = models.RoleInfo
fields= ['id','role_name','role_type','role_type_value',
'status','status_value','create_time','update_time']

  

返回数据:

{
"next": null,
"previous": null,
"data": [
{
"id": 1,
"role_name": "testrole",
"role_type": "0",
"role_type_value": "普通角色",
"status": "0",
"status_value": "禁用",
"create_time": "2021-08-02 19:24:27",
"update_time": "2021-08-02 19:24:27"
}
],
"page_size": 10,
"page": 1,
"totals": 1,
"msg": "ok",
"code": 200,
"success": true
}

方式二:

class RoleSerializer(serializers.ModelSerializer):

role_type_value = serializers.CharField(source="get_role_type_display",max_length=10,read_only=True)
status_value = serializers.CharField(source="get_status_display",max_length=10,read_only=True)

class Meta:
model = models.RoleInfo
fields= ['id','role_name','role_type','role_type_value',
'status','status_value','create_time','update_time']

  

返回也可以达到一样的预期结果



举报

相关推荐

0 条评论