首页 > 解决方案 > 添加每个新帖子时如何向 PositiveIntegerField 模型字段添加 +1?

问题描述

我有一个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方法,在添加每个新的Post.

也就是说,每个帖子必须有一个Order-index,如果站点上已经有3个帖子,那么当添加第四个时-索引4被添加到他的字段中,依此类推。

订单字段(第 1 个帖子)中的“1”索引,订单字段(第 2 个帖子)中的“2”索引等 3、4、5... 类似 ID。

帮助实现这个逻辑即时方法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)

但这不起作用。请帮帮我!

标签: djangodjango-models

解决方案


也许是这样的:

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如果您还没有,我建议您为该字段添加一个索引,因为每次创建新实例时都会查询该字段。如果没有索引,性能可能会受到影响,特别是在有很多行的情况下。


推荐阅读