Как избежать двойного сохранения после определения метода `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)