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

Django自定义用户模型注册报错:no such table: auth_user(已解决)

Django自定义AbstractUser模型注册时出现django.db.utils.OperationalError: no such table: auth_user错误

问题详情

在accounts应用中基于AbstractUser实现自定义用户模型后,注册视图调用user.save()时触发错误:

django.db.utils.OperationalError: no such table: auth_user

相关环境与配置:

  • Django版本:4.2.6
  • Python版本:3.11.6
  • 核心配置:AUTH_USER_MODEL = "accounts.User",accounts已添加至INSTALLED_APPS
  • 异常触发点:accounts/views.py中Register视图的post方法内user.save()
  • 其他场景:createsuperuser命令、Django Admin、Django Shell创建用户均正常

相关代码片段

accounts/views.py 注册视图

class Register(View):
    def get(self, request):
        if request.user.is_authenticated:
            messages.info(request, "You are already logged in")
            return redirect("index")
        return render(request, "accounts/register.html")
    def post(self, request):
        passwd1 = request.POST.get("password1", "")
        passwd2 = request.POST.get("password2", "")
        if passwd1 != passwd2:
            messages.warning(request, "Password not match")
            return redirect("accounts:register")
        email = request.POST.get("email", "")
        user = authenticate(email=email, password=passwd1)
        if user is None:
            user = User(email=email)
            user.set_password(passwd1)
            user.save()
            messages.success(request, "User created")
            return redirect("accounts:login")
        else:
            messages.info(request, "User already exists.")
            return redirect("accounts:register")

accounts/models.py 自定义User模型

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import gettext as _
from .managers import UserManager

class User(AbstractUser):
    username = None
    email = models.EmailField(_('email address'), unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

    def __str__(self):
        return f'User({self.id}, "{self.email}")'

accounts/managers.py 用户管理器

from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import gettext as _

class UserManager(BaseUserManager):
    """
    Custom user model manager.
    """
    use_in_migration = True

    def create_user(self, email, password, **extra_fields):
        if not email:
            raise ValueError(_('Users must have an email'))
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, password, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)
        if extra_fields.get('is_staff') is not True:
            raise ValueError(_('Superuser must have is_staff=True.'))
        if extra_fields.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))
        return self.create_user(email, password, **extra_fields)

settings.py 关键配置

INSTALLED_APPS += ['accounts.apps.AccountsConfig', 'shorturl.apps.ShorturlConfig']
AUTH_USER_MODEL = "accounts.User"

已解决方案

注册视图中导入了Django默认的auth.User模型,而非自定义的accounts.User。修改accounts/views.py的导入语句:

将:

from django.contrib.auth.models import User

替换为:

from .models import User

这样代码会使用自定义的用户模型,而非默认的auth_user表对应的模型,解决表不存在的错误。

内容的提问来源于stack exchange,提问作者Dev-Bittu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:25:23