Как хранить исторические данные, используя 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()

И тогда все изменения модели будут сохранены в отдельной таблице. Вы можете использовать это поле в коде или использовать представления администратора для проверки исторических записей и извлечения.

Другие вопросы по тегам