我有一个函数来显示版本对象的历史列表,如下所示,我在history/views.py#L1的公共回购中有这个特定的history/views.py#L1文件
from django.http import HttpResponse
from reversion.models import Version
#from django.contrib.admin.models import LogEntry
import json
def history_list(request):
history_list = Version.objects.all().order_by('-revision__date_created')
data = []
for i in history_list:
data.append({
'date_time': str(i.revision.date_created),
'user': str(i.revision.user),
'object': i.object_repr,
'type': i.content_type.name,
'comment': i.revision.comment
})
data_ser = json.dumps(data)
return HttpResponse(data_ser, content_type="application/json")要更改我访问过的管理页面127.0.0.1:8000/admin的对象实体,我更改了一个用于表示的布尔字段,如"is_active“,从true改为false。
现在,我来到历史页127.0.0.1:8000/历史
我看到json的数据如下:
{"type": "model a", "date_time": "2015-03-04 15:58:36.141569+00:00", **"comment": "Changed is_active."**, "object": "ModelA object", "user": "admin1"}解决方案可能有:,我希望将其拆分为previous_value:"True","new_value":"False","field":"is_active“。
,我的研究转向解决方案,我钻研了reversion/models.py的修订类,以查看是否有任何额外的论证来显示字段和价值,但据我所知,我无法找到可以在哪里找到字段和值以供评论的线索。这是修订版的评论,供参考。
comment = models.TextField(blank=True,
verbose_name=_("comment"),
help_text="A text comment on this revision.")表示字段的解决方案:这看起来可能有点傻,但我只是黑进了上面我自己的评论数据,将字段表示为
'field': i.revision.comment.split(' ')[-1] 但是我仍然需要得到字段的值,这些值在变化后是原始的和新的。
发布于 2015-03-05 20:18:32
我希望我能正确地理解这个问题,这是一个半生不熟的解决方案:
from django.db.models.signals import pre_save
from django.dispatch import receiver
import reversion
@receiver(pre_save)
def _pre_save(sender, **kwargs):
_i = kwargs.get('instance')
_i_old = sender.objects.get(pk=_i.pk)
_current, _past = set(_i.__dict__.keys()), set(_i_old.__dict__.keys())
_intersection = _current.intersection(_past)
_changed_keys = set(o for o in _intersection if _i.__dict__[o] != _i_old.__dict__[o])
_comment = ['changed {} from {} to {}'.format(_, _i_old.__dict__[_], _i.__dict__[_]) for _ in _changed_keys]
reversion.set_comment(', '.join(_comment))对性能开销考虑得不多,但这应该能起作用。
希望这能有所帮助。
发布于 2015-03-04 18:16:10
我认为,如果您保存了实际的和以前的ver.field_dict (您进行版本提交的相同位置),然后比较并将版本更改保存到另一个模型中,您可以实现您想要的结果。
history_list = Version.objects.all().order_by('-revision__date_created')
ver = history_list[0]
ver.field_dict也许这个应用程序能帮你。https://github.com/jedie/django-reversion-compare
https://stackoverflow.com/questions/28857467
复制相似问题