Как избежать двойного сохранения после определения метода `Save` на модели?

Я определил Save метод в моем model для order полей.

Теперь, когда я делаю некоторые манипуляции с полем Order в View и вызываю save() - я сохраняю дважды - в View save() и Model save().

Из-за этого проблема! Как решить эту проблему? Как сделать так, чтобы Save работал только при создании объекта модели? И чтобы save не работал, когда я save() в Views

save

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)
Вернуться на верх