Django - переопределение метода save с помощью super возвращает ошибку unique contraint при создании объекта

Переопределение метода save с помощью super возвращает ошибку unique contraint при создании объекта. Как ее решить?

def save(self, *args, **kwargs):
        if self.pk is None:
            super(IntoDocumentProduct, self).save(*args, **kwargs)
            # some logic
        # more logic
        super(IntoDocumentProduct, self).save(*args, **kwargs)
        self.full_clean()

Ниже приведена ошибка, которая появляется в консоли. Она направлена конкретно на метод save() в модели. Я не знаю, что в нем не так. В конце концов, я не могу использовать self.save(), потому что будет рекурсивный цикл.

Я также публикую ошибку, которая появляется, когда я тестирую api в Insomnia.

IntegrityError at /api/wms/intodocuments/products/create/
duplicate key value violates unique constraint "wms_dokumentprzyjeciaprodukt_pkey"
DETAIL:  Key (id)=(151) already exists.

Я на 90% уверен, что вам нужно правильно определить super. Я попробовал то же, что и вы, и не получил ошибки компиляции, но это определенно не лучшая практика. Особенно, если вы не определяете возврат в операторе if. Это приведет к тому, что super будет вызван дважды, что может привести к исключению из-за того, что функция сохранения будет запущена дважды. Обычно я устанавливаю его сразу после объявления функции (мой предпочтительный метод) или в последней строке.

def save(self, *args, **kwargs):
   super(IntoDocumentProduct, self).save(*args, **kwargs)
   # your overwrite code

или

def save(self, *args, **kwargs):
    # your overwrite code
    super(IntoDocumentProduct, self).save(*args, **kwargs)
Вернуться на верх