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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:52:41