【问题标题】:Django - Keeping history of a fieldDjango - 保存字段的历史
【发布时间】:2015-05-03 04:14:45
【问题描述】:

使用 django 1.7 管理页面,我希望 Person 对象具有唯一的注释,同时保留注释字段的历史记录。 这是我的代码:

class Note(models.Model):
    note = models.TextField(blank=True, default='')
    date = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return self.note


class NoteHist(models.Model):
    id = models.AutoField(primary_key=True)
    note = models.ForeignKey('Note')

    def __unicode__(self):
        return str(self.note)


class Person(models.Model):
    name = models.CharField(max_length=20, primary_key=True)
    note = models.ForeignKey('NoteHist')


    def __unicode__(self):
        return self.name

首先,当在 Note 对话框上按下保存按钮时,弹出窗口会重定向到一个空白页面,就好像它坏了一样;但我可以刷新主管理页面以列出注释。 其次,这些注释不是特定于人的。我的意思是 Person2 可以选择 Person1 写的笔记。 我只想显示特定人员写的最后一条笔记,同时保留他的笔记历史记录。 顺便说一句,如果这样更容易,我不需要在管理页面中显示历史记录。 请指导我。

【问题讨论】:

    标签: python django


    【解决方案1】:

    基本思想是每次通过覆盖 Note 的“save”方法更新 Note 对象时创建一个新的 NoteHist 实例。

    这是一个类似的问题:Store versioned history of Field in a Django model

    显然,有一个包可以在每次创建/更新/删除时存储 Django 模型状态,并且还支持与 django admin 的集成:https://github.com/treyhunner/django-simple-history

    【讨论】:

    • 我尝试了解决那个“类似”问题的方法。它给了我一个错误:TypeError: 'RenameBaseModelAdminMethods' object is not iterable。我将尝试简单的历史。
    • 我自己没试过这个包。请让我知道它是否有效。
    • 谢谢。 django-simple-history 在管理页面中运行良好,您仍然可以将搜索和过滤器应用到管理页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2011-05-28
    • 2012-01-25
    • 2010-11-01
    相关资源
    最近更新 更多