如何从Django REST Framework POST请求的request.data中提取字段关联外键保存数据
解决方案
你只需调整TicketSerializer的逻辑处理project_code到Project实例的映射关联即可,原有视图代码无需修改,具体修改如下:
序列化器修改后完整代码
from rest_framework import serializers from ticketing_app_api.models import Ticket, Project class TicketSerializer(serializers.ModelSerializer): # 定义仅写入的project_code字段,不需要返回给前端 project_code = serializers.CharField(write_only=True) class Meta: model = Ticket # 新增project_code到字段列表 fields = ['id', 'ticket_url', 'description', 'user', 'type', 'project_code'] # 校验project_code对应项目是否存在,直接返回查到的Project实例减少重复查询 def validate_project_code(self, value): try: return Project.objects.get(project_code=value) except Project.DoesNotExist: raise serializers.ValidationError("传入的project_code无对应匹配项目") # 重写创建逻辑关联项目实例 def create(self, validated_data): # 取出校验后得到的Project实例 project = validated_data.pop('project_code') validated_data['project'] = project return super().create(validated_data)
接口调用示例
POST请求的请求体按以下格式传参即可正常创建关联对应项目的工单:
{ "project_code": "你的项目编码", "ticket_url": "工单地址", "description": "工单描述", "user": "提交用户", "type": "工单类型" }
内容的提问来源于stack exchange,提问作者Ruben Adriaanse
相关产品推荐
相关产品推荐

