如何使用django reversion更改名称后获取上一个对象值?

时间:2015-03-02 20:52:50

标签: python django django-reversion

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/admin 我将对象名称从“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"}]

1 个答案:

答案 0 :(得分:1)

您只需要设置一个变量来保存以前的项目,并根据需要将其插入到字典中。请注意,这使用getattr作为获取object_repr previous_object的方法,并且如果没有,则安全地提供默认值(如第一次迭代的情况)。

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