2

如何将 django-reversion 添加到使用 django 和 django-rest 框架开发的应用程序中,我添加了以下函数来获取对象的历史记录

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")

如何将 django-reversion 添加到使用 django 和 django-rest 框架开发的应用程序的 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 并将上述对象的值更改为“其他对象”时。当我刷新 127.0.0.1:8000/历史。我又得到了一个 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"}]
4

1 回答 1

1

您只需要设置一个变量来保存上一项并根据需要将其插入字典中。请注意,这getattr用作获取object_reprof的一种方法,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
于 2015-03-02T21:47:48.967 回答