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

