Как Django обрабатывает приращение первичного ключа AutoField? - PullRequest
1 голос
/ 08 февраля 2020

В проекте Django с postgresql я однажды вставил en запись в БД и один день. Кто-то, кто имеет к нему доступ, вручную добавил 36 других строк в базу данных с помощью pgadmin4 . Когда я хочу добавить новую строку с проектом Django, я, очевидно, получил IntegrityError, потому что Django пытается добавить 1 к последнему идентификатору записи, добавленному проектом Django (Это что я думаю это пытается сделать). Вот обратная трассировка:

duplicate key value violates unique constraint "register_catalog_pkey"
DETAIL:  Key (id)=(2) already exists.

Как сказать Django, что идентификатор последней записи равен 36 (последнее значение, добавленное вручную с помощью pgadmin4)?

Я также пытался получить идентификатор поле в Django Admin, чтобы я мог его отредактировать, но он не появился.

class RegisterAdmin(admin.ModelAdmin)
    list_display_links = ['id',]
    list_display = ('id',)

Нужно ли удалить первичный ключ, обработанный с помощью Django, и определить IntegerField в качестве первичного ключа?

register_id = models.AutoField(primary_key=True)

до

register_id = models.IntegerField(primary_key=True)

1 Ответ

1 голос
/ 08 февраля 2020

Использование ALTER SEQUENCE команда

ALTER SEQUENCE <b>&lttable_name></b>_id_seq RESTART WITH 37

Пример: ALTER SEQUENCE myapp_register_id_seq RESTART WITH 37

...