Первый (и, вероятно, лучший) вариант - удалить значения идентификаторов из импортируемых данных и разрешить Django управлять автоматически увеличивающимся значением PK ( См. Документы здесь ). Если вы звоните .save()
, не включайте значение идентификатора в экземпляр модели, и это должно решить вашу проблему. Если значение id
не равно None
, то здесь вы можете выйти из-под контроля c.
Если это не работает для вашего варианта использования (например, вам нужны значения идентификатора: данные, которые вы импортируете, остаются без изменений), второй и более сложный вариант - использовать команду Django sqlsequencereset
( Документация здесь ), которая будет возвращать операторы sql, которые необходимо выполнить сбросить автоматически увеличивающееся значение PK до текущего максимального идентификатора + 1. В приложении django можно выполнить следующий код для выполнения этих операторов sql:
from django.db import connections
from django.core.management.color import no_style
# 'default' is the name of the database which may need to change
# execute the sequence_reset_sql command for all models in a specific 'APP_NAME'
sequence_sql = connections['default'].ops.sequence_reset_sql(
no_style(), [apps.get_model(['APP_NAME'], model) for model in models])
# execute the sql statements
with connections['default'].cursor() as cursor:
for sql in sequence_sql:
cursor.execute(sql)
^ обратите внимание, что это для Django 1,11