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

Django中如何自定义User模型并添加额外字段

Django扩展内置User模型新增自定义字段的实现方法

Django扩展内置User模型有两种常用实现方案,按需选择即可:

  • 方案1:继承AbstractUser(推荐新项目使用)
    该方案直接替换Django内置的User模型,可自定义字段的灵活性最高,仅适用于还未执行过auth相关数据库迁移的新项目。

    1. 编辑models.py文件,代码如下:
    from django.contrib.auth.models import AbstractUser
    from django.db import models
    
    class CustomUser(AbstractUser):
        # 按需添加自定义字段,以下为示例
        phone = models.CharField(max_length=11, blank=True, verbose_name="手机号")
        avatar = models.ImageField(upload_to="avatars/", blank=True, verbose_name="用户头像")
    
    1. 在项目的settings.py中添加配置,指定使用自定义用户模型:
    # 替换为你的应用名.自定义用户类名
    AUTH_USER_MODEL = "myapp.CustomUser"
    
    1. 执行迁移命令生成表结构即可:
    python manage.py makemigrations
    python manage.py migrate
    
  • 方案2:一对一关联Profile表(适合已有项目使用)
    该方案不需要改动原有内置User表,无迁移冲突风险,适合已经执行过auth迁移、甚至已经上线的项目。

    1. 编辑models.py文件,代码如下:
    from django.contrib.auth.models import User
    from django.db import models
    from django.db.models.signals import post_save
    from django.dispatch import receiver
    
    class UserProfile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
        # 按需添加自定义字段,以下为示例
        phone = models.CharField(max_length=11, blank=True, verbose_name="手机号")
        avatar = models.ImageField(upload_to="avatars/", blank=True, verbose_name="用户头像")
    
    # 配置信号:创建User实例时自动生成关联的Profile实例
    @receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            UserProfile.objects.create(user=instance)
    
    @receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.profile.save()
    
    1. 执行迁移命令生成Profile表结构即可,使用时通过用户实例.profile.字段名即可访问自定义字段,示例:request.user.profile.phone。

注意:不要直接修改Django内置的User源码,以上两种是官方推荐的标准扩展方案,不会影响Django原有auth体系的功能使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:03