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

