在不运行迁移的情况下向模型字段添加unique = True有什么影响?

时间:2018-07-19 18:23:53

标签: django django-models django-migrations

我对我的django模型进行了相当基本的更改,将现有字段更改为使用unique = True。

为此运行迁移时,它失败,因为此字段已经存在重复数据。

所以我的问题是,这到底是什么意思?此字段的列是否强制执行unique = True?

也许解决问题的另一种方法是在不运行迁移的情况下在字段上添加unique = True有什么影响?

2 个答案:

答案 0 :(得分:0)

如果迁移失败,则意味着尚未将更改应用到数据库,因此您应首先根据要在其上实施唯一约束的列删除重复的条目,并在不运行迁移的情况下添加unique=True什么都不做

答案 1 :(得分:0)

当添加unique=True时,这意味着数据库对该字段不能有任何重复条目。我将在不同部分分解您的问题,并向您解释:

  1. 添加unique=True而不添加makemigrations时,除非再次尝试添加重复值,否则不会显示任何错误。但是以前所有的值仍然会存在。

  2. 添加unique=True并运行makemigrations,然后运行migrate时,如果该字段没有重复项,则不会显示任何错误。但是,如果有重复的条目,它将显示一个错误。而且您将无法运行python manage.py migrate

要克服情况2,您将必须从文件夹中手动删除最后一次迁移(这是您添加的unique=True迁移)。之后,更改/删除重复的条目。只有在此之后,您才能添加unique=True

希望这能回答您的问题。