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

Django提交全部必填数据仍无法创建QuestionReply模型如何解决

问题原因

  1. 外键字段赋值不符合Django规范:Django模型的外键字段直接赋值时,要求传入关联模型的实例对象,你当前直接给reply_user传了字符串格式的用户ID"1",给reply_question传了路径中的整数ID,都不是对应的cUser、Question实例,因此创建模型实例时会触发类型校验错误。
  2. 全局异常捕获掩盖了具体报错信息,导致你无法直观看到错误原因。

解决方法

你可以选择以下任意一种方案修复问题:

方案1:查询关联实例后赋值

先根据ID查询到对应的关联模型实例,再赋值给外键字段,逻辑更直观,适合需要提前校验关联数据是否存在的场景:

# views.py 修改后的代码
class AddQuestionReply(APIView):
    def post(self, request, id):
        try:
            reply = request.data.get('reply')
            # 将字符串类型的用户ID转为整数,查询对应cUser实例
            reply_user_id = int(request.data.get('reply_user'))
            reply_user = cUser.objects.get(id=reply_user_id)
            # 查询对应Question实例
            reply_question = Question.objects.get(id=id)

            reply_to_question = models.QuestionReply(
                reply_user=reply_user, 
                reply_question=reply_question, 
                reply=reply
            )
            reply_to_question.save()

            return Response({'OK': 'Reply added'}, status=status.HTTP_200_OK)
        except Exception as e:
            # 开发阶段可以打印具体错误信息方便排查,上线可移除
            print(e)
            return Response({'400': 'QuestionReply has invalid data'}, status=status.HTTP_400_BAD_REQUEST)

方案2:直接赋值外键ID属性

Django会为每个外键字段自动生成{外键字段名}_id的属性,直接给该属性赋值ID值即可,不需要额外查询关联表,性能更高:

# views.py 修改后的代码
class AddQuestionReply(APIView):
    def post(self, request, id):
        try:
            reply = request.data.get('reply')
            reply_user_id = int(request.data.get('reply_user'))

            reply_to_question = models.QuestionReply(
                reply_user_id=reply_user_id, 
                reply_question_id=id, 
                reply=reply
            )
            reply_to_question.save()

            return Response({'OK': 'Reply added'}, status=status.HTTP_200_OK)
        except Exception as e:
            print(e)
            return Response({'400': 'QuestionReply has invalid data'}, status=status.HTTP_400_BAD_REQUEST)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:15:03