Ho un campo uuid
(non una chiave primaria). La migrazione generato è:La migrazione di Django con campo uuid genera valori duplicati
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),
),
...
]
Ma quando si fa python manage.py migrate
si sta arrestandosi con:
django.db.utils.IntegrityError: could not create unique index "restaurants_device_uuid_key" DETAIL: Key (uuid)=(f3858ded-b8e0-4ac0-8436-8a61b10efc73) is duplicated.
Stranamente, il problema non sembra verificarsi con chiavi primarie (che sono forse creati dal database, e non internamente da django?)
Come posso aggiungere un campo uuid e assicurarmi che le migrazioni funzionino?
La documentazione spiegano questo abbastanza bene, vedere [Migrazioni che si aggiungono campi univoci] (https://docs.djangoproject.com/en/1.9/howto/writing-migrations/#migrations-that-add-unique -campi). – knbk
@knbk: Grazie. È fantastico. Amaizingly interessante e incredibilmente complesso. Semplicemente .. per .. generare .. uuids – dangonfast
In alternativa, è un hack ma fornisce una funzionalità simile, e molto più semplice: str_uuid = models.CharField (max_length = 36, default = lambda: str (uuid.uuid4())). Dopo la migrazione, esegui un ciclo per ciascun oggetto nel modello e salva() per ottenere un uuid univoco. Non hai bisogno di un indice univoco perché le probabilità dello stesso uuid4 sono vicine allo zero. –