Added type and changed_fields to the version serializer class
parent
64944c48dc
commit
7c1b016997
|
@ -3,6 +3,7 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from reversion.models import Version
|
from reversion.models import Version
|
||||||
|
import reversion
|
||||||
|
|
||||||
|
|
||||||
class PickleField(serializers.WritableField):
|
class PickleField(serializers.WritableField):
|
||||||
|
@ -20,14 +21,16 @@ class VersionSerializer(serializers.ModelSerializer):
|
||||||
created_date = serializers.SerializerMethodField("get_created_date")
|
created_date = serializers.SerializerMethodField("get_created_date")
|
||||||
content_type = serializers.SerializerMethodField("get_content_type")
|
content_type = serializers.SerializerMethodField("get_content_type")
|
||||||
object_id = serializers.SerializerMethodField("get_object_id")
|
object_id = serializers.SerializerMethodField("get_object_id")
|
||||||
|
type_name = serializers.SerializerMethodField("get_type")
|
||||||
user = serializers.SerializerMethodField("get_user")
|
user = serializers.SerializerMethodField("get_user")
|
||||||
comment = serializers.SerializerMethodField("get_comment")
|
comment = serializers.SerializerMethodField("get_comment")
|
||||||
fields = serializers.SerializerMethodField("get_object_fields")
|
fields = serializers.SerializerMethodField("get_object_fields")
|
||||||
|
changed_fields = serializers.SerializerMethodField("get_changed_fields")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Version
|
model = Version
|
||||||
fields = ("id", "created_date", "content_type", "object_id", "user", "comment",
|
fields = ("id", "created_date", "content_type", "object_id", "type",
|
||||||
"fields")
|
"type_name", "user", "comment", "fields", "changed_fields")
|
||||||
read_only = fields
|
read_only = fields
|
||||||
|
|
||||||
def get_created_date(self, obj):
|
def get_created_date(self, obj):
|
||||||
|
@ -39,6 +42,9 @@ class VersionSerializer(serializers.ModelSerializer):
|
||||||
def get_object_id(self, obj):
|
def get_object_id(self, obj):
|
||||||
return obj.object_id_int
|
return obj.object_id_int
|
||||||
|
|
||||||
|
def get_type(self, obj):
|
||||||
|
return obj.get_type_display()
|
||||||
|
|
||||||
def get_object_fields(self, obj):
|
def get_object_fields(self, obj):
|
||||||
return obj.field_dict
|
return obj.field_dict
|
||||||
|
|
||||||
|
@ -47,3 +53,32 @@ class VersionSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
def get_comment(self, obj):
|
def get_comment(self, obj):
|
||||||
return obj.revision.comment
|
return obj.revision.comment
|
||||||
|
|
||||||
|
def get_object_old_fields(self, obj):
|
||||||
|
versions = reversion.get_unique_for_object(obj.object)
|
||||||
|
try:
|
||||||
|
return versions[versions.index(obj) + 1].field_dict
|
||||||
|
except IndexError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_changed_fields(self, obj):
|
||||||
|
new_fields = self.get_object_fields(obj)
|
||||||
|
old_fields = self.get_object_old_fields(obj)
|
||||||
|
|
||||||
|
changed_fields = {}
|
||||||
|
if old_fields:
|
||||||
|
for key in new_fields.keys() | old_fields.keys():
|
||||||
|
if key == "modified_date":
|
||||||
|
continue
|
||||||
|
|
||||||
|
if old_fields.get(key, None) == new_fields.get(key, None):
|
||||||
|
continue
|
||||||
|
|
||||||
|
changed_fields[key] = {
|
||||||
|
"name": obj.object.__class__._meta.get_field_by_name(
|
||||||
|
key)[0].verbose_name,
|
||||||
|
"old": old_fields.get(key, None),
|
||||||
|
"new": new_fields.get(key, None),
|
||||||
|
}
|
||||||
|
|
||||||
|
return changed_fields
|
||||||
|
|
Loading…
Reference in New Issue