Как хранить исторические данные, используя Django
Я новичок в Django и пытаюсь выяснить, как хранить исторические данные и иметь возможность ссылаться на любую точку данных с даты в прошлом. Скажем, я хочу хранить данные об изменении роста ребенка по мере его роста и иметь возможность сравнить его рост в день 400 с его ростом в день 6xx. Как бы я настроил это в Джанго? Должны ли быть внешние отношения между ростом и ребенком?
2 ответа
Забудьте об ORM Django (который на самом деле является просто очень тонкой оболочкой вашей базы данных SQL) и подумайте о терминах реляционной базы данных. Здесь у вас очевидно есть две сущности: "малыш" и "рост". У вас также есть следующие отношения: "ребенок" имеет ноль, один или несколько "рост", "рост" принадлежит одному "ребенку". Это действительно переводит на "детский" стол kid(+id, name, dob, ...)
и таблица высот с внешним ключом на kid
: height(+id, kid_id, date, value)
,
Как написать это, используя форму Джанго, довольно просто, поэтому я оставлю это вам.
Вы можете использовать простое приложение истории. В соответствии с документами необходимо добавить 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()
И тогда все изменения модели будут сохранены в отдельной таблице. Вы можете использовать это поле в коде или использовать представления администратора для проверки исторических записей и извлечения.