Django "дублирующее значение ключа нарушает уникальное ограничение" из-за метода сохранения

Я пытаюсь обновить существующий экземпляр модели в интерфейсе администратора Django, но получаю django.db.utils.IntegrityError: duplicate key value violates unique constraint из-за метода сохранения. Согласно документации, метод сохранения не должен иметь никаких проблем с ОБНОВЛЕНИЕМ модели, но похоже, что первичный ключ установлен в значение, которое оценивается как False. https://docs.djangoproject.com/en/4.0/ref/models/instances/#how-django-knows-to-update-vs-insert .

Django абстрагируется от необходимости использования SQL-операторов INSERT или UPDATE. В частности, когда вы вызываете save() и первичный ключ объекта атрибут не определяет значение по умолчанию, Django следует этому алгоритму:

Если атрибут первичного ключа объекта установлен в значение, которое оценивается как в True (т.е. значение, отличное от None или пустой строки), Django выполняет UPDATE. Если атрибут первичного ключа объекта не установлен или если UPDATE ничего не обновил (например, если первичный ключ установлен на значение, не существующее в базе данных), Django выполняет команду INSERT.

Теперь это моя модель и метод сохранения:

class Examene(models.Model):
    saptamani = models.IntegerField(default=3, validators=[MinValueValidator(1), MaxValueValidator(5)])
    zile = models.IntegerField(null=False, blank=True)
    profesor = models.ForeignKey(Materii_profesor, on_delete=models.CASCADE)
    materii = models.ManyToManyField(Materie)

    def save(self, *args, **kwargs):
        self.zile = (self.saptamani * 5)
        super(Examene, self).save(self, *args, **kwargs)

Я использую Postgres в качестве базы данных, как мне избежать этой ошибки? Есть ли способ удалить существующий экземпляр из метода сохранения и сохранить обновленную версию? Или есть другой способ передать это? У меня такая же проблема для всех моделей, у которых переопределен метод сохранения.

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