Django创建Image_model后RoomChatMessage对象重复生成两次问题排查
Django重复生成RoomChatMessage对象问题排查
核心可复现原因按优先级排列:
- 变量拼写错误触发重试机制
你提供的代码存在明显的变量名拼写不一致问题:实例化Image_model时定义的变量名为image_model,但在RoomChatMessage.objects.create方法中给image字段传参时误用为image_modal(多了字母a)。
若你的服务端配置了未捕获异常自动重试、或者前端遇到接口报错会自动重发请求,就会出现如下流程:- 第一次请求成功创建并保存
Image_model对象,执行到消息创建步骤时因变量未定义抛出异常 - 自动触发的第二次请求进入逻辑后,若你对图片上传做了幂等校验,不会重复创建
Image_model对象,但会正常执行消息创建逻辑;同时如果第一次请求的异常捕获规则是跳过报错继续执行后续逻辑,就会生成两条重复的消息。
- 第一次请求成功创建并保存
- 模型信号/重写save方法的附加逻辑
若你确认拼写无问题,检查是否对Image_model做了如下配置:- 重写了
Image_model的save()方法,方法内部包含创建RoomChatMessage的逻辑 - 为
Image_model绑定了post_save信号,信号接收器中会自动创建关联的聊天消息
这种情况下,你代码中显式调用RoomChatMessage.objects.create会生成第一条消息,信号/重写save方法中的隐式调用会生成第二条,完全符合你提到的「注释图片逻辑后无重复」的现象。
- 重写了
- 请求重复提交未做幂等校验
若前两个问题都不存在,排查前端逻辑是否在上传图片后重复触发了消息提交的接口,且接口未加入幂等校验(比如通过唯一请求ID判断是否已经处理过该请求),也会出现该异常。
内容的提问来源于stack exchange,提问作者Henrik
相关产品推荐
相关产品推荐

