在How to add django-reversion to an app developed using django and django-rest framework我添加了以下函数来获取对象的历史记录
from django.http import HttpResponse
from reversion.models import Version
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")
在How to add django-reversion to an app developed using django and django-rest framework的urls.py中我添加了一条通往历史的路线。
当我访问 127.0.0.1:8000/history 时,我得到的 json 数据为
[{"object": "someobject", "user": "someuseruser", "type": "sometype", "comment": "Changed name.", "date_time": "2015-03-02 18:04:58.368650+00:00"}]
执行流程:当我访问 127.0.0.1:8000/admin 并将上述对象的值更改为“otherobject”时。当我刷新 127.0.0.1:8000/history 时。我又得到一个 json 字段
[{"object": "otherobject", "user": "someuseruser", "type": "sometype", "comment": "Changed name.", "date_time": "2015-03-02 18:04:58.368650+00:00"}]
下面是我在向历史函数中添加一个额外字段时遇到的问题:
我想在历史函数的上述迭代中再包含一个字段。像 previous_object: ""在更改名称之前获取对象名称,即使在更改名称之后也是如此。 例如:- 来自 127.0.0.1:8000/管理员 我将对象名称从“apple”更改为“orange”。
当我访问历史路由127.0.0.1:8000/history时
[{"object": "apple", "object_before_changed": ""null": "someuseruser", "type": "sometype", "comment": "Changed name.", "date_time": "2015-03-02 18:00:58.368650+00:00"}]
我应该能够看到如下
[{"object": "orange", "object before_changed": ""apple": "someuseruser", "type": "sometype", "comment": "Changed name.", "date_time": "2015-03-02 18:04:58.368650+00:00"}]
请您参考如下方法:
您只需要设置一个变量来保存上一个项目,并根据需要将其插入到字典中。请注意,这使用了 getattr作为获取 previous_object 的 object_repr 的方法,如果没有则安全地提供默认值(第一次迭代就是这种情况)。
data = []
previous_object = None
for i in history_list:
data.append({
'date_time': str(i.revision.date_created),
'user': str(i.revision.user),
'object': i.object_repr,
'previous_object': getattr(previous_object,'object_repr',None),
'type': i.content_type.name,
'comment': i.revision.comment
})
previous_object = i
