Django迁移外键字段类型与当前类型不匹配

2024-06-28 19:37:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用MSSQL数据库,在Django进入展会之前,我已经创建了一些表,因此使用inspectdb我得到了带有managed=FalseMeta选项的模型。然后我创建了其他使用Django迁移的工具。这些模型是这样的:

class ModelAlreadyCreated(models.Model):
    # This PK field is set as varchar(16)
    id = models.CharField(primary_key=True, db_column='CVE', max_length=16)
    ...other fields

    class Meta:
        managed=False

class DjangoModel(models.Model):
    model_ac_fk = models.ForeignKey(ModelAlreadyCreated)
    ... other fields

当我使用makemigrations创建迁移文件时,我得到以下信息:

^{pr2}$

在这一点上,一切似乎都正常,但使用migrate命令时,将显示以下错误:

django.db.utils.OperationalError: (1778, "Column 'CVE' is not the same data 
type as referencing column 'model_ac_fk' in foreign key 'model_ac_fk_fk_CVE'.DB-Lib error 
message 20018, severity 16:\nGeneral SQL Server error: Check messages from 
the SQL Server\nDB-Lib error message 20018, severity 16:\nGeneral SQL Server 
error: Check messages from the SQL Server\n")

出现此错误是因为Django试图创建一个nvarchar(16)foreignkey字段,而实际引用的字段是varchar(16)

我可以使用sqlmigrate获取SQL并更改字段类型,然后直接在数据库中运行它并伪造迁移,但是我想知道是否有任何方法可以在不接触任何SQL脚本的情况下使用Django进行迁移?在


Tags: thedjango模型数据库sqlmodelservermodels