Django 如何摆脱迁移错误

Posted

技术标签:

【中文标题】Django 如何摆脱迁移错误【英文标题】:Django How to Get rid of Migration Errors 【发布时间】:2019-05-23 23:59:29 【问题描述】:

我正在使用 Django;当我更改模型时,每次都会出错。

我只更改模型中的一个字段,并且愚蠢地出现很多错误每次

django.db.utils.OperationalError:没有这样的表:

django.db.migrations.exceptions.InconsistentMigrationHistory:

OperationalError 没有这样的列:table.colunm

django.db.utils.OperationalError: "表已经存在"

和bla bla bla ..

我可能在 Django 中遇到了所有错误类型,现在真的很困扰我。

我每次都在尝试所有解决方案:

删除迁移 找到 . -path "/migrations/.py" -not -name "init.py" -delete 找到 . -path "/migrations/.pyc" -delete 清除每个应用的迁移历史记录 删除实际的迁移文件。 创建初始迁移 伪造初始迁移 python manage.py migrate --fake python manage.py migrate --fake-initial python manage.py migrate --run-syncdb 删除数据库

我能找到的所有解决方案。

愚蠢地尝试所有解决方案,并且;最后,是的,我可以找到解决方案,但是,我现在真的很厌倦这个愚蠢的错误。

有什么方法可以消除 Django 中的迁移错误? 只有我需要这个答案; '当我只更改模型字段时,为什么每次都会出现这些疯狂的错误??!!!?'

例如:

这是我的模型:

from django.db import models
from django.conf import settings
from etahfiz.sabitler import DERS_SEVIYESI

# Create your models here.
class Student(models.Model):
    systemId     = models.CharField(max_length=15, unique=True )
    adSoyad   = models.CharField(max_length=20, blank=True)
    dersSeviyesi = models.CharField(max_length=15,choices=DERS_SEVIYESI )
    def __str__(self):
        return str(self.systemId)

class Teacher(models.Model):
    systemId = models.CharField(max_length=15 , unique=True)
    user   = models.OneToOneField(settings.AUTH_USER_MODEL)
    adSoyad   = models.CharField(max_length=20, blank=True)
    def __str__(self):
        return str(self.systemId)

class StuTeach(models.Model):
    student = models.ForeignKey(Talebe)
    teacher = models.ForeignKey(Hoca)
    tarihBas = models.DateField()
    tarihBit = models.DateField(blank=True, null=True)

这是完美的工作,但是;我只想向 Teacher 模型添加一个字段:

dersSeviyesi = models.CharField(max_length=15,choices=DERS_SEVIYESI )

现在的教师模式是这样的:

class Teacher(models.Model):
    systemId = models.CharField(max_length=15 , unique=True)
    user   = models.OneToOneField(settings.AUTH_USER_MODEL)
    adSoyad   = models.CharField(max_length=20, blank=True)
    dersSeviyesi = models.CharField(max_length=15,choices=DERS_SEVIYESI )
    def __str__(self):
        return str(self.systemId)

当我尝试迁移时:

python manage.py makemigrations sinif 
python manage.py migrate 

错误错误错误 django.db.utils.OperationalError: "表已经存在"

或者这样的……

每次只更改一个字段,得到 Django 的所有错误...

我怎样才能摆脱这种类型的错误??

谢谢。

【问题讨论】:

【参考方案1】:

转到您的数据库并找到迁移表并删除条目。然后再次运行迁移。这时候你可能会面临 ContentType 已经存在。然后删除 content_type 表。或者,最简单的解决方案是删除数据库并重新创建,但是如果您有重要数据,则所有数据都会丢失。

【讨论】:

以上是关于Django 如何摆脱迁移错误的主要内容,如果未能解决你的问题,请参考以下文章

Django-Memsql 初始迁移错误

Django:迁移错误中的加载数据

Django 迁移错误:列不存在

Django迁移错误表已经存在

Django 迁移错误 KeyError: ('list', u'user')

postgres 的 Django 1.8 迁移错误