Django Rest Framework grp_name必填错误及request.user保存失败问题
问题排查与解决方案
1. grp_name 必填错误的原因及修复
你看到的grp_name必填错误,根本原因是前端传递的字段名和模型字段不匹配:
- 模型里的字段是
grp_name,但前端fetch请求里传的是id_grp_name,后端接收不到正确的字段值,自然触发必填校验。 - 同理,前端传的
id_code、id_status也和模型的code、status字段名对不上,这也是为什么你设置了code为null=True还是有问题(其实不是code的问题,是字段名错了导致值没传进去)。
修复前端代码,把body里的字段名改成和模型一致:
body:JSON.stringify({ 'code': id_code, 'grp_name': id_grp_name, 'status': id_status, })
2. create_by 无法保存request.user的问题修复
模型里create_by是必填外键,但前端不会传递当前用户信息,序列化器里设置required=False只是跳过校验,实际保存时需要手动传入用户:
修改views.py的Add_Grp函数:
@api_view(['POST']) def Add_Grp(request): # 先判断用户是否登录,未登录直接返回错误 if not request.user.is_authenticated: return Response({"error": "请先登录"}, status=401) serializer = GroupMasterSerializer(data=request.data) if serializer.is_valid(): # 保存时手动把当前用户传给create_by字段 serializer.save(create_by=request.user) return Response({"message": "分组创建成功"}, status=201) else: return Response(serializer.errors, status=400)
额外优化提示
- 模型里的
create_at和update_at因为设置了auto_now_add和auto_now,DRF会自动处理,不需要在序列化器的extra_kwargs里加required=False,可以删掉这两行。 - 前端可以加个响应处理,方便看后端返回的结果:
.then(function(response) { return response.json(); }) .then(function(data) { console.log(data); }) .catch(function(error) { console.error('请求出错:', error); })
内容的提问来源于stack exchange,提问作者shyam rathod
相关产品推荐
相关产品推荐

