Как добавить +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
, если его еще нет, потому что это поле будет запрашиваться каждый раз при создании нового экземпляра. Без индексов производительность может пострадать, особенно при большом количестве строк.