我有一個uuid
字段(不是主鍵)。生成的遷移是:Django遷移與uuid字段生成重複的值
from __future__ import unicode_literals
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
dependencies = [
....
]
operations = [
...
migrations.AddField(
model_name='device',
name='uuid',
field=models.UUIDField(default=uuid.uuid4, unique=True),
),
...
]
但是這樣做python manage.py migrate
當它與崩潰:
django.db.utils.IntegrityError: could not create unique index "restaurants_device_uuid_key" DETAIL: Key (uuid)=(f3858ded-b8e0-4ac0-8436-8a61b10efc73) is duplicated.
奇怪的是,似乎問題不與主鍵(這是可能通過數據庫中創建的發生,而不是由Django的內部?)
如何添加一個uuid字段,並確保遷移工作?
該文檔解釋這很好,見[即添加獨特的領域遷移(https://docs.djangoproject.com/en/1.9/howto/writing-migrations/#migrations-that-add-unique -fields)。 – knbk
@knbk:謝謝。這是驚人的。驚人的有趣和驚人的複雜。只是..要..生成.. uuids – dangonfast
或者,它是一個黑客,但提供了類似的功能,並且更簡單:str_uuid = models.CharField(max_length = 36,default = lambda:str(uuid.uuid4()))。遷移後,爲模型中的每個對象運行一個循環,並保存()以獲得唯一的uuid。你不需要一個唯一的索引,因爲相同的uuid4的機率幾乎爲零。 –