如何使用Django存储历史数据

How to store historical data using Django

我是 Django 的新手,正在尝试弄清楚如何存储历史数据并能够引用过去某个日期的任何数据点。假设我想存储孩子成长过程中身高变化的数据,并能够将他在第 400 天的身高与第 6xx 天的身高进行比较。我将如何在 Django 中进行设置?身高和孩子之间需要有外键关系吗?

忘掉 Django 的 ORM(它实际上只是 SQL 数据库的一个非常薄的包装器)并从关系数据库的角度考虑。这里显然有两个实体:"kid" 和 "height"。你还有以下关系:一个"kid"有零个,一个或多个"height",一个"height"属于一个单一的"kid"。这确实转化为 "kid" table kid(+id, name, dob, ...) 和 "height" table 在 kid 上带有外键:height(+id, kid_id, date, value).

如何使用 Django 的 orm 编写此代码非常简单,所以我会留给你。

您可以使用 simple history 应用程序。 根据 docs 你需要在你的模型中添加一个 HistoricalRecords 字段:

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()

然后所有模型更改将存储在单独的 table 中。 您可以在代码中使用该字段或使用管理视图查看历史记录和retrieve.