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

DRF ModelViewSet partial_update意外删除关联子对象求助

问题解决:DRF partial_update意外清除子任务关联

问题根源就是你怀疑的序列化器里children字段的default=[]设置,哪怕开启了partial=True也会触发这个问题。

原因解释

DRF的partial=True允许只传递部分字段进行更新,但如果字段定义了default参数,在partial更新场景下,只要请求里没传该字段,序列化器就会自动把这个字段的值设为默认值。这里default=[]等同于告诉序列化器“将children关联设置为空”,而PrimaryKeyRelatedField(many=True)在处理空列表时,会执行清除所有关联子任务的操作——也就是把这些子任务的parent字段设为null,这就是为什么调用super().partial_update后子对象查询集为空。

解决方案

去掉children字段的default=[],只保留required=False即可:

children = serializers.PrimaryKeyRelatedField(many=True, required=False, queryset=Task.objects.all())

修改后,执行partial_update时,序列化器只会处理你传入的status和updated_at字段,不会碰children关联,子任务的parent字段会保持原样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:57:06