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

在DRF中使用Djoser,如何给注册表单添加Username字段?

解决Djoser注册表单添加Username字段的问题

要在Djoser的用户注册流程中添加Username字段,核心是自定义Djoser的注册序列化器并指定给Djoser使用,具体步骤如下:

1. 自定义注册序列化器

在你的serializers.py中,继承Djoser的CreateUserSerializer,重写其Meta类来包含username字段:

from djoser.serializers import CreateUserSerializer
from django.contrib.auth import get_user_model

User = get_user_model()

class CustomUserCreateSerializer(CreateUserSerializer):
    class Meta(CreateUserSerializer.Meta):
        model = User
        fields = ('id', 'username', 'email', 'password')  # 可按需添加state、city等其他字段

注:如果你的UserSerializer已经包含了额外业务字段,也可以让它直接继承CreateUserSerializer,确保注册流程能处理所有需要的字段。

2. 在settings.py中配置Djoser

告诉Djoser使用你自定义的注册序列化器,添加以下配置:

DJOSER = {
    'SERIALIZERS': {
        'user_create': 'your_app.serializers.CustomUserCreateSerializer',  # 替换为你的序列化器实际路径
        'user': 'your_app.serializers.UserSerializer',  # 可选:配置自定义用户详情序列化器
    },
    # 可选配置:开启密码确认输入框
    'USER_CREATE_PASSWORD_RETYPE': True,
}

3. 修正URL路由冲突

你的urls.py存在重复路由配置,会导致Djoser路由解析异常,修改为:

urlpatterns = [
    path('', include(router.urls)),
    path('api/auth/', include('djoser.urls')),
    path('api/auth/', include('djoser.urls.jwt')),
    # 移除重复的path('api/auth/users/',include('djoser.urls'))
]

4. 确认用户模型字段规则

如果使用自定义用户模型,需确保username字段设置为必填且唯一;若使用Django默认User模型,username本身就是必填字段,无需额外调整。

完成以上配置后,用户注册接口(默认路径为/api/auth/users/)就会要求传入username、email和password字段,DRF的浏览器可视化界面也会同步显示对应的Username输入框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:45:28