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

重写dj-rest-auth注册序列化器失败:添加name字段不生效

解决dj-rest-auth自定义注册序列化器添加name字段不生效的问题

你的自定义序列化器未生效的核心原因是没有重写父类的get_cleaned_data和save方法,导致新增的name字段无法被保存到用户模型;另外Meta类覆盖fields会丢失父类自带的必要字段(如密码字段),破坏注册流程。

步骤1:确保用户模型包含name字段

如果使用自定义User模型,先确认模型里有name字段:

# accounts/models.py
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    name = models.CharField(max_length=100)
    # 其他自定义字段...

同时在settings.py中指定自定义用户模型:

# settings.py
AUTH_USER_MODEL = 'accounts.User'

步骤2:修正自定义注册序列化器

重写get_cleaned_data将name加入清洗数据,再重写save方法保存该字段:

# accounts/serializers.py
from dj_rest_auth.registration.serializers import RegisterSerializer
from rest_framework import serializers
from django.contrib.auth import get_user_model

User = get_user_model()

class CustomRegisterSerializer(RegisterSerializer):
    name = serializers.CharField(max_length=100)

    def get_cleaned_data(self):
        # 继承父类的清洗数据,新增name字段
        cleaned_data = super().get_cleaned_data()
        cleaned_data['name'] = self.validated_data.get('name')
        return cleaned_data

    def save(self, request):
        # 调用父类保存用户,再设置name字段并保存
        user = super().save(request)
        user.name = self.cleaned_data.get('name')
        user.save()
        return user

步骤3:验证配置正确性

保持你的settings.py和路由配置不变,确保REST_AUTH_REGISTER_SERIALIZERS路径正确指向自定义序列化器:

# settings.py
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_EMAIL_VERIFICATION = 'none'

REST_AUTH_REGISTER_SERIALIZERS = {
    'REGISTER_SERIALIZER': 'accounts.serializers.CustomRegisterSerializer'
}
# urls.py
urlpatterns = [
    path('', include('dj_rest_auth.urls')),
    path('registration/', include('dj_rest_auth.registration.urls')),
]

关键说明

  • 不需要在序列化器的Meta类中覆盖fields,父类已经包含email、password1、password2等必要字段,覆盖会导致注册时缺少必填参数
  • 必须通过get_cleaned_data收集新增字段的验证数据,再在save方法中写入用户实例,这是dj-rest-auth扩展自定义字段的标准方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:07:35