Django序列化

Django序列化

问题一

序列化的model中含choice字段信息存在的问题,status会显示数字而非状态相关的文本,通过在serializers.py文件中添加另一个status_display字段类显示状态文本,便可以解决该问题

1
2
3
4
5
6
7
8
9
10
11
12
13
from rest——framework import serializers
from .models import Sprint,Task

...
class TaskSerializer(serializers.ModelSerializer):
status_display = serializers.SerializerMethodField()

class Meta:
model = Task
fields = ("id","name","description","sprint","status","status_display","order","assignred","started","due","completed",)

def get_status_display(self,obj):
return obj.get_status_display()
  • status_display 是一个只读字段,返回序列化器中get_status_display中方法的值,该方法的语法格式为get + 下划线 + 字段名称组成,如上所示,get_status_display

问题二

序列化遇到的第二个问题是: assigned是一个指向User模型中的外键,这里显示的是用户的主键,然而我们的URL结构期望通过用户名来引用用户,我们在serializers中使用SlugRelatedField来解决这个问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class TaskSerializer(serializers.ModelSerializer):
assigned = serializers.SlugRelatedField(
slug_field=User.USERNAME_FIELD, required=False, allow_null=true,
queryset=user.objects.all()
)
status_display = serializers.SerializerMethodField()

class Meta:
model = Task
fields = (
"id", "name", "description", "sprint", "status", "status_display", "order", "assigned", "started", "due",
"completed")

def get_status_display(self, obj):
return obj.get_status_display()

本文标题:Django序列化

文章作者:shuke

发布时间:2020年04月20日 - 13:04

最后更新:2020年04月20日 - 13:04

原始链接:https://shuke163.github.io/2020/04/20/Django%E5%BA%8F%E5%88%97%E5%8C%96/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------

本文标题:Django序列化

文章作者:shuke

发布时间:2020年04月20日 - 13:04

最后更新:2020年04月20日 - 13:04

原始链接:https://shuke163.github.io/2020/04/20/Django%E5%BA%8F%E5%88%97%E5%8C%96/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%