【问题标题】:Django : Model Instance historyDjango:模型实例历史
【发布时间】:2012-08-22 02:40:09
【问题描述】:

在我的项目中,我必须处理上传的文件,并且我想拥有每个文件版本的历史记录。并在一个视图中显示历史记录。 在我的模型中,每个文件都有一个版本、一个名称和一个路径。该文件通过一对多关系与另一个类“A”相关。 我希望有一种更新功能来替换以前的文件,并且我还希望能够访问具有文件所有特征及其相关模型实例(A 类)的历史记录。

我不知道该怎么做。我听说过 django reversion 和 django revisions。 你对我有什么建议?

谢谢

【问题讨论】:

标签: django revision-history


【解决方案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')

您可以有一个名为 new_version 的 post_save 信号,并更新文档上的当前修订号

2.您甚至可以使用亚马逊的 s3 来存储文档,并通过修订号访问它,并将修订号的获取参数传递给它(这是一种更昂贵的方法)

【讨论】:

  • 实际上,我首先需要对与该文件相关的许多模型进行跟踪。文件模型与其他模型之间的关系很复杂。而且更新文件也要更新很多相关的模型。所以我认为它不适合我的情况。不过谢谢
  • 在这种情况下您可以使用通用外键:检查一下 - docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#id1
猜你喜欢
  • 2012-12-25
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2020-10-10
  • 2012-05-19
  • 1970-01-01
相关资源
最近更新 更多