我对我的django模型进行了相当基本的更改,将现有字段更改为使用unique = True。
为此运行迁移时,它失败,因为此字段已经存在重复数据。
所以我的问题是,这到底是什么意思?此字段的列是否强制执行unique = True?
也许解决问题的另一种方法是在不运行迁移的情况下在字段上添加unique = True有什么影响?
答案 0 :(得分:0)
如果迁移失败,则意味着尚未将更改应用到数据库,因此您应首先根据要在其上实施唯一约束的列删除重复的条目,并在不运行迁移的情况下添加unique=True
什么都不做
答案 1 :(得分:0)
当添加unique=True
时,这意味着数据库对该字段不能有任何重复条目。我将在不同部分分解您的问题,并向您解释:
添加unique=True
而不添加makemigrations
时,除非再次尝试添加重复值,否则不会显示任何错误。但是以前所有的值仍然会存在。
添加unique=True
并运行makemigrations
,然后运行migrate
时,如果该字段没有重复项,则不会显示任何错误。但是,如果有重复的条目,它将显示一个错误。而且您将无法运行python manage.py migrate
。
要克服情况2,您将必须从文件夹中手动删除最后一次迁移(这是您添加的unique=True
迁移)。之后,更改/删除重复的条目。只有在此之后,您才能添加unique=True
。
希望这能回答您的问题。