python - 如何在 django 模型实例创建时自动增加类变量?
问题描述
我正在尝试使用 django 信号自动增加模型(类变量)。它工作正常,但只有每次我关闭计算机时,计数才会重新为零。我不知道我到底做错了什么。这里是models.py
class Project(models.Model):
Count = 0
manager = models.ForeignKey(
User,
related_name="project_managing",
on_delete=models.SET_NULL,
blank=True,
null=True,
)
class Saga(models.Model):
status = (
("Do", "Done"),
("Td", "To do"),
("Ir", "In Review"),
("Un", "Under Review"),
("Ap", "Approved"),
("Ca", "Cancelled"),
)
name = models.CharField(max_length=45)
epic_project = models.ForeignKey(
Project, on_delete=models.CASCADE, related_name="sagas", blank=True, null=True
)
epic_status = models.CharField(max_length=2, blank=True, null=True, choices=status)
epic_key = models.CharField(max_length=30, blank=True, null=True)
这里是signals.py
@receiver(pre_save, sender=Saga)
def epicKey(sender, instance, *args, **kwargs):
if not instance.epic_key:
instance.epic_key = (
instance.epic_project.key + "-" + str(instance.epic_project.Count + 1)
)
instance.epic_project.__class__.Count += 1
不知道为什么要重新初始化 count 变量。
解决方案
这不是正确的方法。
每个 Django 进程都保留自己的内存,每次该进程退出或您关闭机器时,所有内存都会消失,因为 RAM 是易失性的。
您需要某种数据库,例如 Redis 或 PostgreSQL,用于非易失性存储。
我建议使用 Redis,因为它是最简单的,但您需要确保它实际上将数据保存在磁盘上,因为默认情况下它只将数据保存在 RAM 中。
推荐阅读
- synchronization - 为什么这个 Vulkan 代码存在写后写风险?
- ios - 如何在 react-native-render-html 中逐字选择文本(版本:4.2.3)
- javascript - 如何忽略axios中的拦截器作为参数?
- javascript - vuetify select 在输入前显示选定的值
- javascript - 投票在 Discord.js 中重新滚动消息
- python - 在 Flask App 中返回 flash.jsonify() 时出错
- python - 如何根据日期索引将行添加到数据框的前面?
- python - 使用 POST 方法的请求返回无值
- javascript - 在 Javascript (React) 中测量 TTS 执行时间
- jquery-select2 - Select2 语言未更改