Автоматический идентификатор не присваивается (Django PostgreSQL)
Я использую бэкенд PostgreSQL 12 с Django 2.2. Для одной конкретной модели сложного проекта (с несколькими приложениями и десятками моделей), модель больше не присваивает автоинкрементный ID. Сама модель безобидна:
class SavedAnalysis(models.Model):
title = models.CharField(max_length=100)
user = models.ForeignKey(User, on_delete=models.CASCADE)
sq = models.ForeignKey(SearchQuery, on_delete=models.SET_NULL, null=True, default=None)
json = models.TextField(blank=True, default='')
class Meta:
unique_together = ['title', 'user']
ordering = ['user', 'title']
Когда я делаю либо SavedAnalysis.objects.create(...)
, либо создаю экземпляр и вызываю save()
на нем явно, id устанавливается в None. Объект создается правильно, только автополе "id", назначенное Django, похоже, не увеличивается.
Этот код работал нормально в течение долгого времени, но недавно мне пришлось перенести базу данных на другую машину, и только эта конкретная модель, похоже, пострадала. Я подозревал, что причиной является sqlsequencereset, но и это не помогло. Теперь я прибегаю к "хаку":
s = SavedAnalysis(title=title, user=user, sq=q, json=j)
s.save()
if s.id is None:
SavedAnalysis.objects.filter(
title=title, user=user).update(id=SavedAnalysis.objects.order_by('-id').values_list('id', flat=True)[1] + 1)
Кто-нибудь сталкивался с этим раньше? Я бы предпочел, чтобы ожидаемое поведение работало, а не использовался хак.