我有一个机器人模型,如:
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状态的新模型。
答案 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)