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

如何在Django User模型中添加选项并继承UserCreationForm实现自定义表单

Django自定义User模型+继承UserCreationForm报错解决方案

以下是可直接落地的修复步骤:

  • 第一步:配置settings.py指定自定义用户模型
    必须在项目settings.py中添加如下配置,将<你的app名称>替换为存放自定义User模型的app名:
    AUTH_USER_MODEL = '<你的app名称>.User'
    
    注意:该配置必须在首次执行数据库迁移前设置。如果你之前已经运行过migrate命令,需要删除所有app下migrations文件夹中除__init__.py外的所有文件,删除现有数据库后重新执行python manage.py makemigrations和python manage.py migrate。
  • 第二步:修改models.py字段属性适配可选要求
    你需要给自定义的type字段添加空值允许配置,满足可选要求:
    from django.contrib.auth.models import AbstractUser
    from django.db import models
    
    TYPE_CHOICES =(
        ("individual", "Individual"),
        ("company", "Company"),
    )
    
    class User(AbstractUser):
        # 添加blank=True允许表单为空,null=True允许数据库存空值,若要求注册必填可去掉这两个参数
        type = models.CharField(choices=TYPE_CHOICES, max_length=20, blank=True, null=True)
    
  • 第三步:修正forms.py的错误配置
    首先要确保导入的是你自定义的User模型,而非Django默认的用户模型,同时要在字段列表中补充UserCreationForm默认必填的用户名、密码字段,否则会因缺失核心字段报错:
    from django import forms
    from django.contrib.auth.forms import UserCreationForm
    # 从自己的models导入自定义User和选项,不要导入django默认的auth.User
    from .models import User, TYPE_CHOICES
    
    class UserForm(UserCreationForm):
        first_name = forms.CharField(max_length=50, required=False) # 可选则加required=False
        type = forms.ChoiceField(choices=TYPE_CHOICES, required=False) # 可选则加required=False
    
        class Meta:
            model = User
            # 必须包含默认必填的username、password1、password2,再追加自定义字段
            fields = ['username', 'password1', 'password2', 'first_name', 'type']
    
  • 第四步:视图层调用无需额外修改
    修复后在视图中正常实例化UserForm,调用form.save()即可自动将自定义字段存入用户表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:15:07