扩展Django Abstract User Model时提示表不存在的问题
解决Django扩展AbstractUser后表不存在的问题
问题核心
自定义Student继承AbstractUser并配置AUTH_USER_MODEL后,执行迁移仍提示mainApp_student表不存在,问题出在模型代码错误和迁移执行步骤不完整。
修复步骤
1. 修正模型代码
你的模型存在两处关键错误,会导致迁移无法正确生成:
address直接以类属性拼接字段对象,Django无法识别为有效字段;code字段的MinValueValidator参数传递错误,语法不符合要求。
修正后的模型代码:
from django.db import models from django.contrib.auth.models import AbstractUser from django.core.validators import MinValueValidator, MaxValueValidator import datetime class Student(AbstractUser): birth = models.DateField(default=datetime.date.today) street = models.CharField(max_length=20) street_number = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(99)]) city = models.CharField(max_length=20) province = models.CharField(max_length=20) code = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(9999)]) @property def address(self): return f"{self.street} {self.street_number}, {self.city} {self.code}, {self.province}" def __str__(self): return f'Adresse: {self.address}'
2. 重新执行迁移
自定义用户模型会替换Django默认的auth用户表,仅执行migrate mainApp会跳过关联的auth模块迁移,需按以下步骤操作:
- 开发环境下,删除项目根目录的
db.sqlite3数据库文件; - 删除
mainApp/migrations目录下除__init__.py外的所有迁移文件; - 执行命令:
python manage.py makemigrations python manage.py migrate
3. 配置Admin后台(可选)
要在Admin中管理Student模型,需在mainApp/admin.py中注册:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import Student admin.site.register(Student, UserAdmin)
验证
重启Django服务后访问/admin/,后台应正常加载,mainApp_student表已生成。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

