バージョンのreversion.modelsから履歴としてjsonデータを返す関数があります。
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,
'field': i.revision.comment.split(' ')[-1],
'new_value_field': str(i.field_dict),
'type': i.content_type.name,
'comment': i.revision.comment
})
data_ser = json.dumps(data)
return HttpResponse(data_ser, content_type="application/json")
上記のスニペットを実行すると、出力jsonが次のようになります
[{"type": "fruits", "field": "colour", "object": "anyobject", "user": "anyuser", "new_value_field": "{'price': $23, 'weight': 2kgs, 'colour': 'red'}", "comment": "Changed colour."}]
上記の関数から、
'comment': i.revision.comment
json を "comment": "changed color" として返します。color は、コメントから取得するために関数に記述したフィールドです。
'field': i.revision.comment.split(' ')[-1]
しかし、field_dict からフィールド名と値を取得する方が良い方法だと思います
問題: 上記の json リストから、new_field_value と old_value をフィルター処理したいと思います。new_filed_value では色の値のみ。