我有这样的models.py:
class Tasks(models.Model):
id = models.AutoField(primary_key=True)
roles = (
(u'1', u'task1'),
(u'2', u'task2'),
)
role = models.CharField(max_length=1, choices=roles, default='1')
然后我有serializers.py看起来像这样:
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Tasks
fields = '__all__'
我的观点看起来像这样:
class Tasks(viewsets.ModelViewSet):
queryset = Tasks.objects.all()
serializer_class = TaskSerializer
所以我想做的是;当我发出POSt请求时说我想返回任务角色的已保存数据;如果我将其保存为1,而不是将角色字段返回为1,我想返回task1。我该怎么做呢?
答案 0 :(得分:1)
您可以在to_representation()
中覆盖Serializer class
方法,如下所示,
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Tasks
fields = '__all__'
def to_representation(self, instance):
return_dict = dict(super().to_representation(instance))
if self.context.get('view').action == 'create' and return_dict:
choice_dict = {k[0]: k[1] for k in instance.roles}
return_dict['role'] = choice_dict[return_dict['role']]
return return_dict
简短描述
self.context.get('view').action == 'create'
create
会检查视图的操作是否为POST
(简称,create
请求)。
因此{
"id": 3,
"role": "task2"
}
操作的输出响应是这样的,
dict
为什么要对to_representaion()
进行类型转换?
OrderedDict()
方法返回ng new app-name
不可变对象。