【问题标题】:Can't make migrations to django app after i added a new field to one of the models在我向其中一个模型添加新字段后,无法迁移到 django 应用程序
【发布时间】:2021-06-16 15:36:26
【问题描述】:

所以,这是我之前的类别模型:

class Category(models.Model):
    title = models.CharField(max_length=20)

    def __str__(self):
        return self.title

我已经运行了 makemigrations 和 migrate 命令,应用运行良好

然后我必须在模型中再添加一个字段:

class Category(models.Model):
    restricted = models.BooleanField(default=False)
    title = models.CharField(max_length=20)

    def __str__(self):
        return self.title

现在当我运行 makemigrations 时,它给出了以下错误:

return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError:没有这样的表:events_category

首先它给出了“没有这样的列”错误,但我现在并不关心数据,所以我删除了 sqlite 文件和所有迁移并重新开始,就在那时出现了这个错误

该模型已在另一个名为 Post 的模型中设置为外键:

class Post(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE, default=DEFAULT_EXAM_ID)
    # and other fields...

在我添加此字段后,有人可以帮我正确执行迁移吗?

【问题讨论】:

    标签: python django django-models django-migrations


    【解决方案1】:

    删除最新的迁移并重新迁移。迁移文件是您特定应用程序中迁移文件夹中的文件

    如果错误仍然存​​在,请再次清除迁移。现在删除添加的模型。迁移没有错误。然后再次添加模型并重新迁移。

    【讨论】:

      【解决方案2】:

      当您在创建表之前尝试加载数据时会弹出此错误。您可能有一个 import 语句尝试在 migrate 完成之前加载数据。

      尝试注释掉加载模型的导入语句并执行makemigrationsmigrate

      【讨论】:

        【解决方案3】:

        分辨率:

        1. 评论新添加的字段并进行虚假迁移。
        • python manage.py makemigrations appname
        • python manaage.py migrate appname --fake
        1. 取消注释同一行并进行正常迁移。
        • python manage.py makemigrations appname
        • python manaage.py 迁移应用名称

        【讨论】:

          猜你喜欢
          • 2014-08-10
          • 2012-05-19
          • 2013-10-16
          • 2014-11-24
          • 2010-11-18
          • 2018-10-16
          • 1970-01-01
          • 2019-11-05
          • 2020-06-13
          相关资源
          最近更新 更多