作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个功能来显示版本对象的历史列表,如下所示,并且我在公共(public)存储库 https://github.com/praneethkumarpidugu/django-reversion/blob/master/rev_history/views.py#L1 中有这个特定的 .py 文件。 :
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”的 bool 字段从 true 更改为 false。
现在,我来到历史页面127.0.0.1:8000/history
我看到的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]
但我仍然需要获取字段的值,即原始值和更改后的新值。
最佳答案
我希望我正确理解了这个问题,这是半生不熟的解决方案:
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))
没有过多考虑性能开销,但这应该可以解决问题。
希望这有帮助。
关于python - 将 revision.comment 拆分为 Django-reversion 中的字段和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857467/
我是一名优秀的程序员,十分优秀!