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

DJ-REST-AUTH自定义注册问题:API端点未显示first_name和last_name

问题分析

你使用DJ-REST-AUTH开发用户注册API时,已配置自定义序列化器但接口仍未显示first_name和last_name字段,核心原因是序列化器写法冗余,未正确复用父类逻辑,导致自定义字段未被接口识别。

解决方案

1. 修正authentication/serializers.py

移除冗余的Meta类,重写get_cleaned_data时调用父类方法,确保自定义字段被纳入清理后的数据:

from rest_framework import serializers
from dj_rest_auth.registration.serializers import RegisterSerializer

class CustomRegisterSerializer(RegisterSerializer):
    # 添加必填的自定义字段
    first_name = serializers.CharField(required=True)
    last_name = serializers.CharField(required=True)

    def get_cleaned_data(self):
        # 先获取父类处理后的基础数据,再追加自定义字段
        cleaned_data = super().get_cleaned_data()
        cleaned_data.update({
            'first_name': self.validated_data.get('first_name'),
            'last_name': self.validated_data.get('last_name'),
        })
        return cleaned_data

    # 无需重写save方法,父类save会通过适配器自动保存cleaned_data中的字段

2. 显式关联视图与序列化器(可选)

若上述修改后仍不生效,可在自定义视图中直接指定序列化器:

from dj_rest_auth.registration.views import RegisterView
from rest_framework import permissions
from .serializers import CustomRegisterSerializer

class CustomRegisterView(RegisterView):
    permission_classes = [permissions.AllowAny]
    serializer_class = CustomRegisterSerializer  # 强制绑定自定义序列化器

3. 验证配置并重启服务

  • 确认settings.py中配置无误:
    REST_AUTH_REGISTER_SERIALIZERS = {
        'REGISTER_SERIALIZER': 'authentication.serializers.CustomRegisterSerializer'
    }
    
  • 重启Django服务器,清除缓存确保新配置生效。

原理说明

父类RegisterSerializer的save方法会调用adapter.save_user,allauth默认适配器会自动将cleaned_data中的字段赋值给用户模型并保存,因此只需确保first_name和last_name被加入cleaned_data即可。移除自定义Meta类是避免覆盖父类字段逻辑,保证字段正确合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:12:02