使用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
相关产品推荐
相关产品推荐

