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)
Как я могу это исправить?
Большое спасибо!
Исправлять ничего не нужно. Postgres использует для этого счетчик - он не берет "первое свободное место" в диапазоне id, а просто использует следующее значение счетчика.
Это только для того, чтобы быть уникальным значением, поэтому наличие пробелов в диапазоне, где вы удалили записи, не является проблемой.
(Также нет необходимости добавлять это самостоятельно - если вы не укажете primary_key=True
в каком-либо поле, Django автоматически добавит поле id
, которое делает это).
"AUTO INCREMENT" поддерживается БД (в вашем случае Postgres), поэтому для сброса значения автоинкремента вам нужно изменить последовательность в базе данных. Проверьте эту ссылку, чтобы узнать, как сбросить вручную Сброс счетчика автоинкремента в postgres
Я не знаю вашего подробного сценария, но изменение автоинкремента может быть опасным. Например, пользователь создает 1, 2, 3 и удаляет 2, тогда какое значение будет правильным для перезапуска 2 или 4?
Тем не менее, если вы решили поддерживать значение автоинкремента вручную, вы можете рассмотреть возможность использования Django Signal(post_delete). Используя сигнал, вы можете изменять последовательность базы данных после удаления поста.