Python 如何使用Django存储历史数据
我是Django的新手,我正在尝试找出如何存储历史数据,并能够引用过去某个日期的任何数据点。假设我想存储一个孩子在成长过程中身高变化的数据,并能够比较他在第400天和第6xx天的身高。我要如何在Django建立这个?身高和孩子之间是否需要外键关系?忘掉Django的ORM(它实际上只是SQL数据库的一个很薄的包装器),从关系数据库的角度考虑。这里有两个实体:“孩子”和“身高”。你也有以下关系:一个“孩子”有零、一个或多个“身高”,一个“身高”属于一个“孩子”。这实际上转化为一个“kid”表Python 如何使用Django存储历史数据,python,django,sqlite,historical-db,Python,Django,Sqlite,Historical Db,我是Django的新手,我正在尝试找出如何存储历史数据,并能够引用过去某个日期的任何数据点。假设我想存储一个孩子在成长过程中身高变化的数据,并能够比较他在第400天和第6xx天的身高。我要如何在Django建立这个?身高和孩子之间是否需要外键关系?忘掉Django的ORM(它实际上只是SQL数据库的一个很薄的包装器),从关系数据库的角度考虑。这里有两个实体:“孩子”和“身高”。你也有以下关系:一个“孩子”有零、一个或多个“身高”,一个“身高”属于一个“孩子”。这实际上转化为一个“kid”表kid
kid(+id,name,dob,…)
和一个外键位于kid
上的“height”表:height(+id,kid\id,date,value)
如何使用Django的orm编写这篇文章非常困难,所以我将把它留给您。您可以使用这个应用程序。
根据需要,您需要将历史记录
字段添加到模型中:
from django.db import models
from simple_history.models import HistoricalRecords
class Kid(models.Model):
id = models.IntegerField(primary_key=True)
height = models.IntegerField()
history = HistoricalRecords()
然后,所有模型更改都将存储在单独的表中。
您可以在代码中使用此字段,也可以使用管理员视图检查历史记录和。这是基本的关系数据库建模,没有特定于Python或Django的内容。我对该库有一个问题-当您
.save()时
模型实例-它将整个实例保存在历史记录中
还是仅保存上次更新的时间?您可以在通过HR更新之前获取此实例的早期版本?文档中写得不清楚。@Chiefir是的,它保存了整个实例,可以保存。@Chiefir您能检查这个解决方案吗?我没有测试这个解决方案,只是好奇这个库是如何工作的。如果我需要此功能,将来可能会使用它:)