首页 > 解决方案 > 如何在 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 变量。

标签: pythondjangodjango-modelsdjango-signals

解决方案


这不是正确的方法。

每个 Django 进程都保留自己的内存,每次该进程退出或您关闭机器时,所有内存都会消失,因为 RAM 是易失性的。

您需要某种数据库,例如 Redis 或 PostgreSQL,用于非易失性存储。

我建议使用 Redis,因为它是最简单的,但您需要确保它实际上将数据保存在磁盘上,因为默认情况下它只将数据保存在 RAM 中。


推荐阅读