diff --git a/apps/audits/models.py b/apps/audits/models.py index 8ff1c5c9c..37e818f70 100644 --- a/apps/audits/models.py +++ b/apps/audits/models.py @@ -6,7 +6,8 @@ from importlib import import_module from django.conf import settings from django.core.cache import caches from django.db import models -from django.db.models import Q +from django.db.models import Q, CharField, F, Value +from django.db.models.functions import Cast, Coalesce, Concat from django.utils import timezone from django.utils.translation import gettext, gettext_lazy as _ @@ -181,6 +182,16 @@ class ActivityLog(OrgModelMixin): return super(ActivityLog, self).save(*args, **kwargs) +def user_display_expression(): + return Concat( + Coalesce(Cast(F('name'), CharField()), Value('None')), + Value('('), + Coalesce(Cast(F('username'), CharField()), Value('None')), + Value(')'), + output_field=CharField(), + ) + + class PasswordChangeLog(models.Model): id = models.UUIDField(default=uuid.uuid4, primary_key=True) user = models.CharField(max_length=128, verbose_name=_("User")) @@ -199,7 +210,11 @@ class PasswordChangeLog(models.Model): @staticmethod def filter_queryset_by_org(queryset): if not current_org.is_root(): - users = current_org.get_members() + users = ( + current_org.get_members() + .annotate(user_display=user_display_expression()) + .values_list('user_display', flat=True) + ) queryset = queryset.filter( user__in=[str(user) for user in users] )