首页 > 解决方案 > 测试期间数据库错误:无法更改列

问题描述

我更改了模型的一个字段,以创建迁移并应用它。没有错误。但是当我尝试运行测试时,出现了错误。

django.db.utils.OperationalError: (1833, "Cannot change column 'rfiid': used in a foreign key constraint 'elements_attachments_rfi_id_bc723558_fk_rfis_rfiid' of table 'test_smap_production.elements_attachments'")

我更改的字段 - rfiid。我将它从AutoField切换到CharField

模型.py

class Rfis(models.Model):
    rfiid = models.CharField(max_length=6, primary_key=True)
    ....

迁移成功,并且数据库中没有已创建的模型实例。为什么会出现这样的错误以及如何纠正?

ps

class ElementsAttachments(models.Model):
    e = models.ForeignKey('Elements', models.DO_NOTHING)
    attachment = models.ForeignKey('Attachments', models.DO_NOTHING)
    rfi = models.ForeignKey('Rfis', models.DO_NOTHING)
    timestamp = models.DateTimeField(auto_now=True)
    active = models.IntegerField()
    vendor_response = models.IntegerField(blank=True, null=True)

标签: django

解决方案


一种不干净且有风险的方法是删除所有以前的迁移并进行新的迁移。

警告:这是有风险的,如果您的数据库中已有数据,可能会造成损害。


推荐阅读