Tôi có trường uuid
(không phải là khóa chính). Sự di cư được tạo ra là:Di chuyển Django với trường uuid tạo ra các giá trị trùng lặp
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),
),
...
]
Nhưng khi làm python manage.py migrate
nó được đâm với:
django.db.utils.IntegrityError: could not create unique index "restaurants_device_uuid_key" DETAIL: Key (uuid)=(f3858ded-b8e0-4ac0-8436-8a61b10efc73) is duplicated.
Lạ lùng thay, vấn đề dường như không xảy ra với các phím chính (được có thể được tạo ra bởi các cơ sở dữ liệu, và không phải nội bộ bởi django?)
Làm cách nào để thêm trường uuid và đảm bảo di chuyển hoạt động?
Các tài liệu giải thích điều này khá tốt, xem [Migrations mà thêm trường duy nhất] (https://docs.djangoproject.com/en/1.9/howto/writing-migrations/#migrations-that-add-unique -lĩnh vực). – knbk
@knbk: Cảm ơn. Thật là tuyệt vời. Amaizingly thú vị và đáng kinh ngạc phức tạp. Chỉ .. để .. tạo ra .. uuids – dangonfast
Cách khác, nó là một hack nhưng cho một chức năng tương tự, và cách đơn giản hơn: str_uuid = models.CharField (max_length = 36, default = lambda: str (uuid.uuid4())). Sau khi di chuyển, chạy một vòng lặp cho từng đối tượng trong mô hình và lưu() nó để có được một uuid duy nhất. Bạn không cần một chỉ mục duy nhất vì cơ hội của cùng uuid4 gần bằng không. –