django简单历史记录 - 如何在管理员中创建对象时创建历史记录

时间:2017-12-14 21:27:46

标签: django django-simple-history

我正在使用带有django 1.8的django-simple-history == 1.9.0包。 当我在管理员之外创建一个对象,然后在管理页面中查看该对象的历史记录时,它会显示一条消息

  

此对象没有更改历史记录。它可能没有添加   通过这个管理站点。

我尝试为该对象设置用户:

user = User.objects.get(username='john')
Poll.objects.get(id=536).history.update(history_user=user)

但这并没有解决问题。

Poll.objects.get(id=536).history.all().count()

返回1,因此生成了历史记录。 任何想法如何使它显示历史或如何创建一个额外的历史? 我也试过了update_change_reason,但这根本不起作用。

2 个答案:

答案 0 :(得分:1)

假设您的django-simple配置正确,请按照以下步骤操作

在您要更改导入 django-simple-history 的应用的 model.py 文件中,以下为导入摘录:

from simple_history.models import HistoricalRecords

model.py 文件中,添加历史属性,如下所示:

history = HistoricalRecords()

示例:

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

class Poll(models.Model):
    question = models.CharField(max_length=200)
    history = HistoricalRecords()

为了让您在管理员之外进行的更改显示在Django管理员中,只需在 admin.py 文件中添加以下代码:

导入:

from simple_history.admin import SimpleHistoryAdmin

使用注册表配置管理员历史记录:

admin.site.register(Pool, SimpleHistoryAdmin)

示例:

from django.contrib import admin
from simple_history.admin import SimpleHistoryAdmin
from .models import Pool

# Register your models here.
admin.site.register(Tag, SimpleHistoryAdmin)

在此之后,您的历史记录将显示在管理员中。

来源:

https://django-simple-history.readthedocs.io/en/latest/usage.html#integration-with-django-admin

https://django-simple-history.readthedocs.io/en/latest/advanced.html#recording-which-user-changed-a-model

此致

Felipe Dominguesche

Web Developer

答案 1 :(得分:0)

显然我需要在LogEntry中创建日志,如下例所示,因为django-simple-history不会跟踪管理页面之外的更改:

from django.contrib.admin.models import LogEntry
from django.contrib.admin.models import LogEntryManager, ADDITION, CHANGE
user_id = User.objects.all()[0].id
content_type_id = ContentType.objects.get(model='color').id
object_id = 4
object_repr = 'Color object'
action_flag = CHANGE
change_message = 'you changed it!'
LogEntry.objects.log_action(user_id, content_type_id, object_id, object_repr, action_flag, change_message=change_message)