Как добавлять +1 к полю модели PositiveIntegerField при добавлении каждой новой записи?

Есть модель Posts. Для произвольной сортировки создано отдельное поле Order = models.PositiveIntegerField.

Задача: в модели переопределяя метод Save - осуществить добавление индекса +1 (от последнего имеющегося индекса) в данное поле при добавлении каждому новому посту.

def save(self):
        super().save()

То есть - у каждого поста должен быть ещё Order-index, и если уже имеется 3 поста на сайте, то при добавлении четвертого - у него добавляется в поле индекс 4, и так далее.

Помогите осуществить эту логику. Вроде простая, но не знаю как подступиться.


Ответы (1 шт):

Автор решения: Za Ars

Тогда можно как то так. Сортируем и находим объект с наивысшим значением и присваем его значение +1

def save(self, *args, **kwargs):
    max_order_obj = type(self).objects.order_by('-ordering').first()
    if max_order_obj:
        self.ordering = max_order_obj.ordering + 1
    else:
        self.ordering = 1
    super().save(*args, **kwargs)

Можно улучшить до получения только значения ordering

→ Ссылка