我对我的一个django模型做了一个非常基本的改动,改变现有的字段使用unique = True。
当我为此运行迁移时,它会失败,因为此字段已存在重复数据。
所以我的问题是,这究竟是什么意思?此字段的列是强制执行唯一= True还是不执行?
也许另一种构建问题的方法是在不运行迁移的情况下在字段上添加unique = True会产生什么影响?
如果迁移失败意味着更改尚未应用于数据库,那么您应该首先根据您尝试强制执行唯一约束的列删除重复条目,添加unique=True
而不运行迁移将不执行任何操作
添加unique=True
时,表示数据库不能包含该字段的任何重复条目。我会在不同的部分打破你的问题并向你解释:
unique=True
但不添加makemigrations
时,在您尝试再次添加重复值之前,它不会显示任何错误。但所有以前的价值观仍将存在。unique=True
并运行makemigrations
,然后migrate
时,如果您没有该字段的任何重复条目,它将不会显示任何错误。但如果有重复的条目,它会显示错误。你将无法运行python manage.py migrate
。要克服案例2,您必须手动删除文件夹中的上一次迁移(这是您添加的迁移unique=True
)。之后,更改/删除重复的条目。只有在此之后,您才能添加unique=True
。
希望这能回答你的问题。