django - 添加每个新帖子时如何向 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)
但这不起作用。请帮帮我!
解决方案
也许是这样的:
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
如果您还没有,我建议您为该字段添加一个索引,因为每次创建新实例时都会查询该字段。如果没有索引,性能可能会受到影响,特别是在有很多行的情况下。
推荐阅读
- mysql - 将 SQL 查询中的值格式化为数字以将它们导出到 Excel
- python-textfsm - 为 Cisco XR 创建 Textfsm 模板 // 显示 isis 数据库
- java - 如何从 Java 中的 docx 中获取部分
- c++ - 如何在不重新创建现有文件的情况下写入 .txt 文件
- python - 如何创建多个对象以及提供外键字段的外键?
- java - JaxRs 客户端不执行 MessageBodyReader
- java - 从带有对象内容的 XML 文件创建 java 代码
- c# - 在 LUIS 中使用上下文
- oracle - MyBatis Generator 1.3.7 为 Oracle 数据库 12c 生成数据类型错误的实体
- rspec-rails - 如何使用 cancancan 为能力编写 rspec