django.db.utils.IntegrityError:1062,运行Django迁移时密钥的重复项

时间:2018-10-10 12:58:43

标签: django django-rest-framework django-migrations

我的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,“重复项   密钥'api_key'的'fc1d481d-add2-4d9c-92d9-a1b05018730a'')

运行迁移时。

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

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

编辑:

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

它确实会为新记录添加一个不同的值,但是如何使它为表中的现有记录添加一个不同的值?

0 个答案:

没有答案