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

创了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 @ 2023-03-25 22:40  莫~慌  阅读(197)  评论(0)    收藏  举报