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)