数据库迁移不成功解决方案

创了2个应用,user和backend,user的模型表中user_type设置了三个角色,backend的模型表中写了具体的角色表,现在想将user中的表与backend中具体的用户表做关联,要在backend的角色表中设外键字段。

# user/models.py

复制代码
class User(AbstractUser):
    role_choices = (
        (1, '管理员'),
        (2, '教师'),
        (3, '学生')

    )
    phone = models.BigIntegerField(null=True, verbose_name='手机号')
    user_type = models.SmallIntegerField(choices=role_choices, default=2, verbose_name='用户类型')
复制代码

# backend/models.py

复制代码
from django.db import models
from user.models import User

# 老师表
class Teacher(BaseModel):
    name = models.CharField(max_length=50, verbose_name='名字')
    # 与user表建立外键关系
    user = models.OneToOneField(User,null=True, on_delete=models.CASCADE)

# 学生表
class Student(models.Model):
    name = models.CharField(max_length=50, verbose_name='名字')
    # 与user表建立外键关系
    user = models.OneToOneField(User,null=True, on_delete=models.CASCADE)

# 课程表
class Course(models.Model):
    name = models.CharField(max_length=50, verbose_name='名字')
    # 与老师表、学生表多对多关系
    teacher = models.ManyToManyField(to='Teacher', blank=True, verbose_name="授课老师")
    students = models.ManyToManyField(to='Student', db_constraint=False, blank=True)
复制代码
  • 如果数据库在老师表、学生表与user表关联之前就添加了数据,先将数据先备份,后全部清除,再迁移。
  • 在清除了所有数据之后迁移还是报错:

  django.db.utils.OperationalError: (1050, "Table 'django_content_type' already exists")

解决方法:

执行下面两条命令:

python manage.py migrate --fake
# 该命令将标记所有迁移为已应用,但不会实际执行任何数据库操作。这个命令通常用于解决迁移文件和数据库不同步的问题。

python manage.py migrate --fake-initial
# 该命令用于在应用程序没有任何迁移记录的情况下创建应用程序的初始迁移。这个命令通常用于在应用程序已经存在的情况下,将应用程序添加到新的数据库中。

 

posted @   莫~慌  阅读(165)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示