从应用程序更改时,django 简单历史记录不起作用

Posted

技术标签:

【中文标题】从应用程序更改时,django 简单历史记录不起作用【英文标题】:django simple history is not working when changed from the application 【发布时间】:2015-07-19 07:11:42 【问题描述】:

我正在使用 django-simple-history 来记录数据库模型中的更改历史。当我从模型历史中更改特定值时,在管理面板中可见。但是,当从应用程序编辑或更改值时,历史记录在管理面板中不可见。有什么我想念的吗?

from django.db import models
from simple_history.models import HistoricalRecords

class AcademicYear(models.Model):
    academic_year_start = models.PositiveIntegerField(blank=False, null=False, max_length=4)
    academic_year_end = models.PositiveIntegerField(blank=False, null=False, max_length=4)
    history = HistoricalRecords()


    def __unicode__(self):
        return "%s-%s" % (self.academic_year_start, self.academic_year_end)

class Activity(models.Model):
    activity_name = models.CharField(max_length=100, blank=False)
    history = HistoricalRecords()

    def __unicode__(self):
        return "%s" % self.activity_name

更新


我调查了我的 在视图中,我使用 .update() 而不是 .save() 来更新我的模型值。

activity_obj_list = Activity.objects.filter(activity_name=name)
activity_obj_list.update(activity_name=new_activity_name)

更新功能不会创建历史日志。这是某种错误吗?

【问题讨论】:

你设置了中间件吗? simple_history.middleware.HistoryRequestMiddleware 我在设置文件中设置了simple_history.middleware.HistoryRequestMiddleware。 【参考方案1】:

这不是错误,这是预期的行为,因为.update() 不会发送保存前/保存后的信号。如果您希望触发历史记录,请遍历您的查询集,执行 save() 而不是使用 .update()

for obj in queryset:
    obj.field1 = some_value
    obj.save()

【讨论】:

以上是关于从应用程序更改时,django 简单历史记录不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django admin 中获取对象的历史记录?

Github桌面窗口同步按钮消失,历史记录选项卡不起作用

具有自定义历史记录的反应路由器不起作用

在 django 中为模型创造完整历史的最佳方法是啥?

为啥这个 Django 日志记录不起作用?

使用 Git 版本控制查看文件的更改历史记录