You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework如何序列化关联对象实现嵌套创建功能

DRF嵌套序列化实现创建主模型时同步创建关联从模型方案

你需要的功能在DRF中的专业术语是可写嵌套序列化器(Writable Nested Serializers),具体实现步骤如下:


1 补全模型定义

首先给外键字段添加related_name参数,用于后续序列化器关联嵌套字段:

# models.py
from django.db import models

class Flight(models.Model):
    # 替换为你实际的字段定义,以下为示例
    field_1 = models.CharField(max_length=100)
    field_2 = models.IntegerField()
    field_3 = models.TextField(blank=True)

class Approach(models.Model):
    # 添加related_name参数,值对应后续序列化器的嵌套字段名
    flight_object = models.ForeignKey(Flight, on_delete=models.CASCADE, related_name="approaches")
    approach_type = models.CharField(max_length=50)
    number = models.IntegerField()

2 编写嵌套序列化器

DRF默认的嵌套序列化器仅支持读取,需要重写create方法实现写入逻辑:

# serializers.py
from rest_framework import serializers
from .models import Flight, Approach

class ApproachSerializer(serializers.ModelSerializer):
    class Meta:
        model = Approach
        # 排除外键字段,创建时会自动关联主表对象
        fields = ["approach_type", "number"]

class FlightSerializer(serializers.ModelSerializer):
    # 嵌套从表序列化器,many=True表示一对多关联
    approaches = ApproachSerializer(many=True)
    
    class Meta:
        model = Flight
        fields = ["id", "field_1", "field_2", "field_3", "approaches"]
    
    def create(self, validated_data):
        # 提取从表数据
        approaches_data = validated_data.pop("approaches")
        # 先创建主表Flight对象
        flight = Flight.objects.create(**validated_data)
        # 批量创建关联的Approach对象
        for approach_item in approaches_data:
            Approach.objects.create(flight_object=flight, **approach_item)
        return flight

3 编写视图

直接使用通用视图即可,无需额外改造:

# views.py
from rest_framework import viewsets
from .models import Flight
from .serializers import FlightSerializer

class FlightViewSet(viewsets.ModelViewSet):
    queryset = Flight.objects.all()
    serializer_class = FlightSerializer

按照常规逻辑配置路由后即可使用。


4 React Native端提交格式要求

前端提交的POST请求体按照以下JSON结构传参即可:

{
    "field_1": "航班字段1值",
    "field_2": 123,
    "field_3": "航班字段3值",
    "approaches": [
        {"approach_type": "进近类型1", "number": 1},
        {"approach_type": "进近类型2", "number": 2}
    ]
}

补充说明

如果需要支持更新Flight时同步修改关联的Approach数据,重写序列化器的update方法即可,逻辑与create类似:先更新主表字段,再处理从表的增删改逻辑。

内容的提问来源于stack exchange,提问作者user2498975

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:09:04