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 如何摆脱迁移错误的主要内容,如果未能解决你的问题,请参考以下文章