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

问题描述 投票:0回答:2

我对我的一个django模型做了一个非常基本的改动,改变现有的字段使用unique = True。

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

所以我的问题是,这究竟是什么意思?此字段的列是强制执行唯一= True还是不执行?

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

django django-models django-migrations
2个回答
0
投票

如果迁移失败意味着更改尚未应用于数据库,那么您应该首先根据您尝试强制执行唯一约束的列删除重复条目,添加unique=True而不运行迁移将不执行任何操作


0
投票

添加unique=True时,表示数据库不能包含该字段的任何重复条目。我会在不同的部分打破你的问题并向你解释:

  1. 当您添加unique=True但不添加makemigrations时,在您尝试再次添加重复值之前,它不会显示任何错误。但所有以前的价值观仍将存在。
  2. 当您添加unique=True并运行makemigrations,然后migrate时,如果您没有该字段的任何重复条目,它将不会显示任何错误。但如果有重复的条目,它会显示错误。你将无法运行python manage.py migrate

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

希望这能回答你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.