2

djangoおよびdjango-restフレームワークを使用して開発されたアプリにdjango-reversionを追加する方法で、オブジェクトの履歴を取得するために以下の関数を追加しました

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 および django-rest フレームワークを使用して開発されたアプリに django-reversion を追加する方法の 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 を更新すると。もう1つのjsonフィールドを取得します

[{"object": "otherobject", "user": "someuseruser", "type": "sometype", "comment": "Changed name.", "date_time": "2015-03-02 18:04:58.368650+00:00"}]

以下は、履歴関数にもう1つのフィールドを追加するために行き詰まった領域です。

ヒストリー関数の上記の反復にもう 1 つのフィールドを含めたいと思います。名前を変更した後でも変更前のオブジェクト名を取得するには、 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

前の項目を保持する変数を設定し、必要に応じて辞書に挿入するだけです。これはofgetattrを取得する方法として使用され、何もない場合はデフォルトを安全に提供することに注意してください(最初の反復の場合のように)。object_reprprevious_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 に答える