У меня есть сценарий импорта, который выполняет ряд команд для получения вещей от одной Пост-ГРЭС DB другому, оба выполнения той же кодовой базы Django. По большей части это использует./manage.py loaddata для копирования, но некоторые объекты требуют дополнительной обработки, и я использую objects.create Django () метод в пользовательском сценарии для копирования данных. При выполнении этого я указываю идентификатор, т.е.,
MyObject.objects.create(id = 2, title = 'foo')
После того как сценарий сделан, я замечаю, что ПОСЛЕДОВАТЕЛЬНОСТЬ Пост-ГРЭС является неправильной в таблицах, где я сделал objects.create (). Т.е. это было 50 перед импортом, и все еще 50 после, даже при том, что таблица теперь имеет 150 объектов. Это, конечно, приводит к ошибкам при создании новых объектов, так как это пытается использовать идентификатор, который уже существует (На всех этих таблицах, идентификатор является просто ванильным автоинкрементным полем). Однако таблицы, которые были заполнены через./manage.py loaddata, кажутся прекрасными.
Я знаю, что могу вручную сбросить эти таблицы с./manage.py Django sqlsequenreset, но мне любопытно относительно того, почему последовательность, кажется, добирается в неисправном состоянии во-первых. objects.create () не увеличивают его? Я пропускаю что-то очевидное?
Все работает нормально. Create () Django () не имеет ничего общего с разделением последовательности напрямую. Кратко:
Итак, если вы хотите, чтобы ваши вставки увеличивали последовательность в соответствии с вашим выбором, вам необходимо вручную изменить значение последовательности, используя выбор SetVal («Sequence_Name», INT_VALUE); В противном случае оставьте его NULL, и он автоматически увеличится - выберите ток VAL и увеличивайте его +1 (если не указано по-разному в определении последовательности).
Другая идея заключается в том, что вы создаете объект, а затем обновляете идентификатор (конечно, его нельзя использовать) и в конце установить значение последовательности к идентификатору MAX.
Поля автонастройки работает, но YO должен сделать запрос в виде
MyObject.objects.create(title='foo')
Без идентификационного поля это autoCalculated с базой данных.