Джанго: история экземпляров модели

В моем проекте мне нужно обрабатывать загруженные файлы, и я хочу иметь историю каждой версии файла. И для отображения истории в одном представлении. В моей модели у каждого файла есть версия, имя и путь. Этот файл связан с другим классом '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 для номера ревизии (это более дорогой подход)

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