У меня есть Django модель, которую я разрабатываю локально, например:
import uuid
from django.db import models
class MyModel(models.Model):
uuid = models.UUIDField(
_('Non-sequential key for external lookups'),
default=uuid.uuid4,
editable=False,
null=False,
unique=True,
)
Это привело к миграции вроде:
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
operations = [
migrations.CreateModel(
name='MyModel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('uuid', models.UUIDField(unique=True, default=uuid.uuid4, editable=False, verbose_name='Non-sequential key for external lookups')),
]
Первоначально это работало отлично; объекты, которые я создал, имели как приростное целое id
, так и свойство uuid
, с id
, сопоставленным с pk
. Перемотка вперед на неделю, и мне нужно пересобрать базу данных, чтобы повторно протестировать сценарий миграции, который я пишу. Сценарий не выполняется, и когда я копаюсь в нем, я обнаруживаю, что поля ID и UUID поменялись местами:
$ ./manage.py shell
>>> from my_model import MyModel
>>> item = MyModel.objects.first()
>>> item.pk
UUID('cee60e6b-aa2e-48a2-a34c-4315ebacea0b')
>>> item.id
UUID('cee60e6b-aa2e-48a2-a34c-4315ebacea0b')
>>> item.uuid
45384
Кто-нибудь еще сталкивался с чем-то подобным? Я озадачен тем, что, черт возьми, происходит или что могло измениться. Сторона базы данных выглядит хорошо (первичный ключ в столбце id
и уникальный индекс в столбце uuid
); это всего лишь отображение Django, это все плохо. Я бегу Django 2.2.9.