Джанго: история экземпляров модели
В моем проекте мне нужно обрабатывать загруженные файлы, и я хочу иметь историю каждой версии файла. И для отображения истории в одном представлении. В моей модели у каждого файла есть версия, имя и путь. Этот файл связан с другим классом 'A' отношением один ко многим. Я хочу иметь своего рода функцию обновления, которая заменяет прежний файл, и я также хочу иметь доступ к истории со всеми характеристиками файла и связанных с ним экземпляров модели (класс A).
Я не знаю как это сделать. Я слышал о реверсии Джанго и ревизиях Джанго. Что вы мне посоветуете?
Спасибо
1 ответ
Вы можете сделать это несколькими способами:
1.Вы можете иметь модель файла документа, которая отслеживает ее вручную.
class DocumentFile(CachedModel):
content_type = models.ForeignKey(ContentType, null=True, blank=True)
object_id = models.PositiveIntegerField(null=True, blank=True)
content_object = generic.GenericForeignKey(ct_field='content_type', fk_field='object_id')
file = models.FileField(upload_to= wherever )
version = models.PositiveIntegerField(default=1)
class Meta:
db_table = 'document_file'
verbose_name = 'Document File'
unique_together = ('document', 'version')
Вы можете получить сигнал post_save с именем new_version и обновить номер текущей версии документа.
2.Вы можете даже использовать Amazon 3 для хранения документа и доступа к нему по номеру ревизии, передавая ему параметр get для номера ревизии (это более дорогой подход)