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

У меня есть модель Posts. И поле Order = models.PositiveIntegerField() было создано для произвольной сортировки.

class Post(models.Model):
    title = models.CharField(max_length=15)
    create = models.DateTimeField(auto_now_add=True)
    Order = models.PositiveIntegerField()

Задача: в модели, переопределяя метод save, добавлять индекс +1 (от последнего доступного индекса Posts) к этому полю при добавлении каждого нового Post.

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

"1" индекс в поле Order (1-е сообщение), "2" индекс в поле Order (2-е сообщение) и т.д. 3, 4, 5... аналогичные ID.

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

Я понимаю, что в модели и что я делаю:

def save(self, *args, **kwargs):
    qs = self.order.objects.all()
    last_item = qs.latest(self.order)
    last_item.order += 1
    super().save(*args, **kwargs)

Но это не работает. Помогите мне, пожалуйста!

Может быть, что-то вроде этого:

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)

Вы получаете класс (model_class), затем сортируете по убыванию по полю order и получаете первый экземпляр.

Я предлагаю добавить индекс для поля order, если его еще нет, потому что это поле будет запрашиваться каждый раз при создании нового экземпляра. Без индексов производительность может пострадать, особенно при большом количестве строк.

Вернуться на верх