Django递归组件提交报错:children字段被误判为必填项
创建组件时出现"children字段必填"错误
在创建Component模型实例时,发送POST请求返回Bad Request错误,响应信息显示children字段为必填项,但模型中parent字段已设置null=True, blank=True,且前端表单未提交children字段。
问题原因
问题出在ComponentSerializer的字段定义上:你显式声明了children = RecursiveField(many=True),而Django REST Framework的自定义Serializer字段默认required=True。因此即使模型中parent是可选字段,序列化器在验证请求数据时,仍会要求必须提交children字段。
解决方法
方案1:将children字段设为非必填
修改序列化器,给RecursiveField添加required=False参数:
class ComponentSerializer(serializers.ModelSerializer): children = RecursiveField(many=True, required=False) image = ImageSerializerField() class Meta: model = Component fields = "__all__"
方案2:设置children为只读字段
如果仅需要在获取组件数据时返回children,而创建/更新时不需要该字段,可将其设为只读:
class ComponentSerializer(serializers.ModelSerializer): children = RecursiveField(many=True, read_only=True) image = ImageSerializerField() class Meta: model = Component fields = "__all__"
此设置下,children字段仅在序列化(后端向前端返回数据)时生效,反序列化(前端提交数据到后端)时会被忽略,不会触发必填校验。
额外说明
你的React表单已经通过const { children, ...data } = formData排除了children字段,只要完成上述序列化器的修改,就能正常创建组件。
内容的提问来源于stack exchange,提问作者newprogrammer12
相关产品推荐
相关产品推荐

