Get created_by and modified_by updating automatically.

This commit is contained in:
Chris Church
2014-04-01 21:27:32 -04:00
parent d632aa0af9
commit 118ddf97f6
12 changed files with 172 additions and 6 deletions
+17
View File
@@ -27,6 +27,9 @@ from taggit.managers import TaggableManager
# Django-Celery
from djcelery.models import TaskMeta
# Django-CRUM
from crum import get_current_user
# Ansible Tower
from awx.main.utils import encrypt_field
@@ -284,6 +287,20 @@ class PrimordialModel(CreatedModifiedModel):
self.save(update_fields=update_fields)
return update_fields
def save(self, *args, **kwargs):
update_fields = kwargs.get('update_fields', [])
user = get_current_user()
if user and not user.pk:
user = None
if not self.pk:
self.created_by = user
if 'created_by' not in update_fields:
update_fields.append('created_by')
self.modified_by = user
if 'modified_by' not in update_fields:
update_fields.append('modified_by')
super(PrimordialModel, self).save(*args, **kwargs)
def clean_description(self):
# Description should always be empty string, never null.
return self.description or ''
+16
View File
@@ -12,6 +12,10 @@ from django.conf import settings
from django.db.models.signals import pre_save, post_save, pre_delete, post_delete, m2m_changed
from django.dispatch import receiver
# Django-CRUM
from crum import get_current_request
from crum.signals import current_user_getter
# AWX
from awx.main.models import *
from awx.api.serializers import *
@@ -361,3 +365,15 @@ def activity_stream_associate(sender, instance, **kwargs):
activity_entry.save()
getattr(activity_entry, object1).add(obj1)
getattr(activity_entry, object2).add(obj2_actual)
@receiver(current_user_getter)
def get_current_user_from_drf_request(sender, **kwargs):
'''
Provider a signal handler to return the current user from the current
request when using Django REST Framework. Requires that the APIView set
drf_request on the underlying Django Request object.
'''
request = get_current_request()
drf_request = getattr(request, 'drf_request', None)
return (getattr(drf_request, 'user', False), 0)