Django如何将嵌套对象保存到不同模型?plan字段必填报错怎么解决
问题根因
报错本质是序列化器校验阶段提前拦截了请求,你在create方法中给子对象补充plan外键的逻辑是在校验通过之后才执行的,而校验阶段PlanEventSerializer默认要求必填plan字段,请求里没传所以直接返回400。
解决方案
修改PlanEventSerializer,将外键plan设置为只读字段,校验时就不会要求前端传入该字段:
class PlanEventSerializer(serializers.ModelSerializer): class Meta: model = PlanEvent fields = '__all__' # 新增这行,指定plan为只读字段,不要求请求传入 read_only_fields = ['plan']
如果不需要在PlanEvent的返回结果中展示plan外键id,也可以直接显式声明需要暴露的字段,排除plan即可:
class PlanEventSerializer(serializers.ModelSerializer): class Meta: model = PlanEvent fields = ['done', 'title']
修改后原有逻辑可以正常运行,创建Plan实例后补充给子PlanEvent的plan字段会正常写入数据库,不会触发校验错误。
内容的提问来源于stack exchange,提问作者lr_optim
相关产品推荐
相关产品推荐

