Django AUTO INCREMENT для PK

У меня есть несколько моделей в моем приложении Django, и я увидел, что поле 'auto_increment_id' (как PK) не работает как 'AUTO INCREMENT' (БД - Postgres).

Я сделал 2 записи с auto_increment_id 1 и 2, удалите запись 2 и сделайте новую с auto_increment_id=3 вместо auto_increment_id=2.

models.py

class Testme(models.Model):
    auto_increment_id = models.AutoField(primary_key=True)
    year = models.ForeignKey(
        Year,
        verbose_name="Year",
        blank=False,
        on_delete=models.CASCADE,
    )

    def __str__(self):
        return str(self.auto_increment_id)

enter image description here

Как я могу это исправить?

Большое спасибо!

Исправлять ничего не нужно. Postgres использует для этого счетчик - он не берет "первое свободное место" в диапазоне id, а просто использует следующее значение счетчика.

Это только для того, чтобы быть уникальным значением, поэтому наличие пробелов в диапазоне, где вы удалили записи, не является проблемой.

(Также нет необходимости добавлять это самостоятельно - если вы не укажете primary_key=True в каком-либо поле, Django автоматически добавит поле id, которое делает это).

"AUTO INCREMENT" поддерживается БД (в вашем случае Postgres), поэтому для сброса значения автоинкремента вам нужно изменить последовательность в базе данных. Проверьте эту ссылку, чтобы узнать, как сбросить вручную Сброс счетчика автоинкремента в postgres

Я не знаю вашего подробного сценария, но изменение автоинкремента может быть опасным. Например, пользователь создает 1, 2, 3 и удаляет 2, тогда какое значение будет правильным для перезапуска 2 или 4?

Тем не менее, если вы решили поддерживать значение автоинкремента вручную, вы можете рассмотреть возможность использования Django Signal(post_delete). Используя сигнал, вы можете изменять последовательность базы данных после удаления поста.

Вернуться на верх