В моей базе уже есть 20 строк, но когда я сохраняю новую строку, они начинаются с идентификатора из 1 - PullRequest
0 голосов
/ 04 марта 2020

Конечно, я импортирую данные в свою таблицу базы данных с уже 20 строками

Когда я использую метод save () для этой таблицы, они запускают сохраненные данные с pk = 1, приводят к ошибке, и они сбываются, когда pk = 21

Может кто-нибудь помочь мне с этим, хотя столбец идентификатора в моей модели по умолчанию, я не перезаписываю его

1 Ответ

1 голос
/ 05 марта 2020

Первый (и, вероятно, лучший) вариант - удалить значения идентификаторов из импортируемых данных и разрешить 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...