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

使用Djoser创建用户时持续返回字段必填错误的求助

排查Djoser创建用户接口必填字段错误的方案

1. 核对请求的基础配置

  • 确保用POST请求访问http://127.0.0.1:8000/auth/users/
  • 检查参数传递格式:必须在Postman的Body > raw > JSON中提交,同时请求头设置Content-Type: application/json,正确参数示例:
    {
      "username": "test_user",
      "email": "test@example.com",
      "password": "TestPass123!"
    }
    
    若用form-data格式,需确保序列化器支持表单数据解析,否则会出现参数无法识别的情况

2. 检查自定义序列化器配置

如果使用了自定义序列化器,需确认:

  • 正确继承Djoser的UserCreateSerializer基类,而非从头编写
  • 未错误将username或password字段设为required=False,示例正确写法:
    from djoser.serializers import UserCreateSerializer
    from django.contrib.auth import get_user_model
    
    User = get_user_model()
    
    class CustomUserCreateSerializer(UserCreateSerializer):
        class Meta(UserCreateSerializer.Meta):
            model = User
            fields = ('id', 'username', 'email', 'password')
    
  • 不要手动覆盖password字段的必填逻辑,Djoser基类已默认处理该字段的必填性

3. 验证Djoser与Django核心配置

  • 在settings.py中确认Djoser序列化器指向正确:
    DJOSER = {
        'SERIALIZERS': {
            'user_create': 'your_app.serializers.CustomUserCreateSerializer',
        },
    }
    
  • 若使用自定义用户模型,确认AUTH_USER_MODEL配置正确:
    AUTH_USER_MODEL = 'your_app.CustomUser'
    
  • 排查是否有自定义中间件/权限类干扰请求参数解析,比如某些中间件修改了request.body导致参数无法被序列化器读取

4. 调试参数接收情况

在自定义序列化器的create方法中添加调试代码,查看实际接收的参数:

def create(self, validated_data):
    print("Received validated data:", validated_data)  # 控制台打印接收的参数
    user = User.objects.create_user(**validated_data)
    return user

也可以在视图层直接打印request.data,确认请求参数是否被正确解析

5. 核对字段名匹配性

  • 若自定义用户模型将用户名字段改为email(而非默认username),需在Djoser配置中指定:
    DJOSER = {
        'LOGIN_FIELD': 'email',
        'USER_CREATE_PASSWORD_RETYPE': False,
    }
    
    同时序列化器中的字段名需与模型字段完全对应

6. 重置服务与缓存

重启Django开发服务器,清除Postman的请求缓存后重新发送请求,避免因配置缓存未更新导致的问题


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:57:10