我正在寻找指导,看看我对to_representation的使用是否是一种不错的方法,或者是否有更好的方法来解决我的特定问题。
我在我的www.example.com中有此代码serializers.py:
from rest_framework import serializers
from .models import Project, Task, TaskStatus
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = ["name", "description", "start_date", "end_date", "pkid"]
def create(self, validated_data):
organization = validated_data.pop('organization', None)
project = Project.objects.create(**validated_data)
if organization:
project.organization = organization
project.save()
return project
class TaskStatusSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = ["name", "description", "pkid"]
def create(self, validated_data):
task_status = TaskStatus.objects.create(**validated_data)
return task_status
class TaskSerializer(serializers.ModelSerializer):
project = serializers.PrimaryKeyRelatedField(queryset=Project.objects.all())
status = serializers.PrimaryKeyRelatedField(queryset=TaskStatus.objects.all())
class Meta:
model = Task
fields = ["name", "description", "project","status","pkid"]
def create(self, validated_data):
project = validated_data.pop('project')
status = validated_data.pop('status')
task = Task.objects.create(project=project, status=status, **validated_data)
task.save()
return task
def to_representation(self, instance):
representation = super().to_representation(instance)
representation['project'] = ProjectSerializer(instance.project).data
representation['status'] = TaskStatusSerializer(instance.status).data
return representation
我想做的是让我的TaskSerializer响应API请求,并提供我用来填充Vue列表的任务,任务状态和项目对象。在视图列表中,我有一个create modal,它加载用户可以通过下拉菜单选择项目并指定状态。这些返回到序列化器作为post,我使用project_id和status_id创建任务。
这里的to_representation用法使流程正常工作,但感觉不太标准。有没有更好更优雅的方法来处理我的用例?
上面的代码是工作,但我想知道是否有一个更好的标准Django的方法。
1条答案
按热度按时间g6ll5ycj1#
根据Docs,调用.to_representation()方法将初始数据类型转换为原始的可序列化数据类型。
因此,如果您想覆盖字段的表示或添加自定义字段,可以使用此方法。
您也可以使用**.SerializerMethodField()**作为只读字段: