用于记录值历史的适当模型结构

时间:2012-12-02 09:42:18

标签: django

我无法弄清楚这个问题的适当模型结构应该是什么(简化版本使解释更容易)

目标是:

  • 包含必填字段的人员模型
  • 添加人物时,您可以选择输入重量和高度的初始值(每个值一个条目,默认为0)
  • 当更新身高和/或体重的值时,先前的值会存储在某个位置以便可以查看历史记录

我知道我可以有一个单独的高度和重量模型,通过ForeignKey将它们链接到Person,但它通过允许一次多个条目使管理员演示文稿混乱和分离。

或者,我可以将高度和权重作为Person中的字段(具有干净的list_view并在字段集中包含这些字段的好处),并且当有任何更新时将先前的值存储到不同的模型中吗?然后可以列出该模型以显示某人的价值历史。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

将ForeignKeys用于身高和体重模型,然后添加一个属性来访问该字段

class Person(model)
    name = CharField()

    @property
    def weight(self):
        return self.weighthistory.latest().value


class Weight(model):
    value = IntegerField()
    date = DateTimeField()
    person = ForeignKey(Person, related_name="weighthistory")

class Height(model)
    value = IntegerField()
    date = DateTimeField()
    person = ForeignKey(Person)

答案 1 :(得分:0)

django-reversion提供此功能。在模型的每个save(),除了列出所有更改之外,还会使用更改的值保存历史记录,您可以回滚到任何以前的版本。

它不需要更改您的模型,甚至还需要与自定义管理类进行管理集成。

low level API提供更多功能。