在django中捕获瞬时模型状态的好习惯是什么?

时间:2015-10-14 06:49:50

标签: python django database

我有一个机器人模型,如:

class Robot(models.Model):      
    version = models.CharField(max_length=20)
    can_version = models.CharField(max_length=20)
    uuid = models.CharField(max_length=20)
    power_status = models.PositiveSmallIntegerField(choices=POWER_STATUS)
    working_status = models.PositiveSmallIntegerField(choices=WORKING_STATUS)

我想在发生错误时将机器人的当前状态(所有字段)保存到数据库中,因为我需要这些信息来分析错误原因,并且查询这些信息是一种常见的操作。

Model audit不是我想要的,因为我不需要保存整个更改历史记录,而只保存错误发生时的瞬时状态。我不想创建一个复制所有Robot字段并用于保存Robot状态的新模型。

1 个答案:

答案 0 :(得分:1)

听起来状态应该是一个单独的模型/类与机器人的FK,这样你的机器人有一个“列表”的所有以前的状态',你只需要查询最新的。

class ModelStatus(models.Model):
    robot = models.ForeignKey(Robot)
    power_status = models.PositiveSmallIntegerField(choices=POWER_STATUS)
    working_status = models.PositiveSmallIntegerField(choices=WORKING_STATUS)

你可能想要添加一些来订购ID而不是id,但那是我无法帮助你的决定。

如果您不想要整个列表,那么您的OneToOneFields

就可以有两个Robot
current_status = models.OneToOneField(ModelStatus, null=True)
previous_status = models.OneToOneField(ModelStatus, null=True)