Skip to content

Commit db67ae5

Browse files
committed
Merge branch 'feature/custom-object-json-serializer'
2 parents 8047064 + c9e01f9 commit db67ae5

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

easyaudit/settings.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,7 @@ def get_model_list(class_list):
108108
CRUD_EVENT_SEARCH_FIELDS = getattr(settings, 'DJANGO_EASY_AUDIT_CRUD_EVENT_SEARCH_FIELDS', ['=object_id', 'object_json_repr', ])
109109
LOGIN_EVENT_SEARCH_FIELDS = getattr(settings, 'DJANGO_EASY_AUDIT_LOGIN_EVENT_SEARCH_FIELDS', ['=remote_ip', 'username', ])
110110
REQUEST_EVENT_SEARCH_FIELDS = getattr(settings, 'DJANGO_EASY_AUDIT_REQUEST_EVENT_SEARCH_FIELDS', ['=remote_ip', 'user__username', 'url', 'query_string', ])
111+
112+
# JSON object representation serializer override
113+
CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE = getattr(settings, 'DJANGO_EASY_AUDIT_CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE', None)
114+
CRUD_OBJECT_MODEL_DELTA_CALLBACK = getattr(settings, 'DJANGO_EASY_AUDIT_CRUD_OBJECT_MODEL_DELTA_CALLBACK', None)

easyaudit/signals/model_signals.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
get_current_user
1515
from easyaudit.models import CRUDEvent
1616
from easyaudit.settings import REGISTERED_CLASSES, UNREGISTERED_CLASSES, \
17-
WATCH_MODEL_EVENTS, CRUD_DIFFERENCE_CALLBACKS
17+
WATCH_MODEL_EVENTS, CRUD_DIFFERENCE_CALLBACKS,\
18+
CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE, CRUD_OBJECT_MODEL_DELTA_CALLBACK
1819
from easyaudit.utils import model_delta
1920

2021
logger = logging.getLogger(__name__)
@@ -53,7 +54,10 @@ def pre_save(sender, instance, raw, using, update_fields, **kwargs):
5354
if not should_audit(instance):
5455
return False
5556
try:
56-
object_json_repr = serializers.serialize("json", [instance])
57+
if CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE != None:
58+
object_json_repr = CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE(instance)
59+
else:
60+
object_json_repr = serializers.serialize("json", [instance])
5761
except Exception:
5862
# We need a better way for this to work. ManyToMany will fail on pre_save on create
5963
return None
@@ -67,6 +71,8 @@ def pre_save(sender, instance, raw, using, update_fields, **kwargs):
6771
if not created:
6872
old_model = sender.objects.get(pk=instance.pk)
6973
delta = model_delta(old_model, instance)
74+
if CRUD_OBJECT_MODEL_DELTA_CALLBACK != None:
75+
delta = CRUD_OBJECT_MODEL_DELTA_CALLBACK(old_model, instance, delta)
7076
changed_fields = json.dumps(delta)
7177
event_type = CRUDEvent.UPDATE
7278

@@ -122,7 +128,11 @@ def post_save(sender, instance, created, raw, using, update_fields, **kwargs):
122128
with transaction.atomic():
123129
if not should_audit(instance):
124130
return False
125-
object_json_repr = serializers.serialize("json", [instance])
131+
132+
if CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE != None:
133+
object_json_repr = CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE(instance)
134+
else:
135+
object_json_repr = serializers.serialize("json", [instance])
126136

127137
# created or updated?
128138
if created:

0 commit comments

Comments
 (0)