Как избежать двойного сохранения после определения метода `Save` на модели?
Я определил Save метод в моем model для order полей.
Теперь, когда я делаю некоторые манипуляции с полем Order в View и вызываю save() - я сохраняю дважды - в View save() и Model save().
Из-за этого проблема! Как решить эту проблему? Как сделать так, чтобы Save работал только при создании объекта модели? И чтобы save не работал, когда я save() в Views
def save(self, *args, **kwargs):
model_class = type(self)
last_item = model_class.objects.order_by('-order').first()
if last_item is not None:
self.order = last_item.order += 1
super().save(*args, **kwargs)
Если я правильно понял, то вы хотите, чтобы дополнительный код в методе сохранения выполнялся только при создании, а не при обновлении экземпляра модели.
Перед созданием объекта в базе данных его PK имеет значение None. Вы можете использовать это для проверки, является ли это операцией создания или обновления.
def save(self, *args, **kwargs):
if self.pk is None:
# this code will only be executed when the object is created
model_class = type(self)
last_item = model_class.objects.order_by('-order').first()
if last_item is not None:
self.order = last_item.order += 1
super().save(*args, **kwargs)