首页 > 解决方案 > django.db.utils.IntegrityError: 1062, 运行 Django 迁移时键的重复条目

问题描述

我的 django 迁移有问题。在进行更改之前,我的表格包含以下列:

STATUS = (
        ('Active', 'Active'),
        ('Pending', 'Pending'),
        ('Incomplete', 'Incomplete')
    )

    id = models.CharField(primary_key=True,  max_length=50, unique=True, editable=False, default=uuid.uuid4)

    name = models.CharField(max_length=100, null=False, default='')
    country = models.CharField(max_length=100, choices=COUNTRY, null=True, blank=True)
    postcode = models.CharField(max_length=20, null=False, blank=True)
    address = models.TextField(max_length=200, null=False, blank=True)
    status = models.CharField(max_length=20, choices=STATUS, default='Pending')
    created_on = models.DateTimeField(default=timezone.now, editable=False)
    balance = models.DecimalField(default='0.00', max_digits=16, decimal_places=2, null=True, editable=True)

但是当我添加新字段时:

api_key = models.CharField(max_length=50, unique=True, editable=False, default=uuid.uuid4)
key_exp = models.DateTimeField(default=one_day_hence, editable=False)

我不断得到

django.db.utils.IntegrityError:(1062,“重复条目'fc1d481d-add2-4d9c-92d9-a1b05018730a'键'api_key'”)

运行迁移时。

首先,我觉得这很可疑,因为 django 将为 any 提供不同的值default=uuid.uuid4。我尝试迁移了几次,但我得到了同样的错误,但使用了不同的密钥。其次,我试图删除unique=True,但这并没有改变任何东西,错误是一样的。

知道为什么以及如何解决这个问题吗?

编辑:

我发现为什么会发生这种情况......我的表中已经有一些记录,并且在迁移时,djangoapi_key为所有现有记录添加了具有相同默认值的新列。(我在删除unique字段并删除最新迁移后发现了这个)

它确实会为新记录添加不同的值,但我怎样才能让它为表中的现有记录添加不同的值?

标签: djangodjango-rest-frameworkdjango-migrations

解决方案


推荐阅读