feat(core): Ensure that model has user context

ref: #788 #759
This commit is contained in:
2025-06-05 13:22:28 +09:30
parent f42e255f37
commit 3915678675
2 changed files with 39 additions and 0 deletions

View File

@ -42,6 +42,11 @@ class Create(
try:
if hasattr(self.model, 'context'):
self.model.context['user'] = self.request.user
self.model.context['logging'] = self.get_log()
response = super().create(request = request, *args, **kwargs)
if str(response.status_code).startswith('2'):
@ -129,6 +134,11 @@ class Destroy(
try:
if hasattr(self.model, 'context'):
self.model.context['user'] = self.request.user
self.model.context['logging'] = self.get_log()
response = super().destroy(request = request, *args, **kwargs)
except Exception as e:
@ -182,6 +192,11 @@ class List(
try:
if hasattr(self.model, 'context'):
self.model.context['user'] = self.request.user
self.model.context['logging'] = self.get_log()
response = super().list(request = request, *args, **kwargs)
except Exception as e:
@ -238,6 +253,11 @@ class Retrieve(
try:
if hasattr(self.model, 'context'):
self.model.context['user'] = self.request.user
self.model.context['logging'] = self.get_log()
response = super().retrieve(request = request, *args, **kwargs)
except Exception as e:
@ -290,6 +310,11 @@ class Update(
try:
if hasattr(self.model, 'context'):
self.model.context['user'] = self.request.user
self.model.context['logging'] = self.get_log()
response = super().partial_update(request = request, *args, **kwargs)
if str(response.status_code).startswith('2'):
@ -360,6 +385,11 @@ class Update(
try:
if hasattr(self.model, 'context'):
self.model.context['user'] = self.request.user
self.model.context['logging'] = self.get_log()
response = super().update(request = request, *args, **kwargs)
if str(response.status_code).startswith('2'):

View File

@ -1,5 +1,6 @@
from django.apps import apps
from django.contrib.auth.models import ContentType
from django.core.exceptions import ValidationError
from django.db.models.signals import (
# post_delete,
post_save
@ -26,6 +27,14 @@ def audit_history(sender, instance, **kwargs):
audit_action = audit_model.Actions.DELETE
if instance.context.get('user', None) is None:
raise ValidationError(
code = 'model_missing_user_context',
message = f'Model {instance._meta.model_name}, is missing user context. ' \
'No audit history can be saved'
)
history = audit_model.objects.create(
organization = instance.organization,