diff --git a/apps/audits/api.py b/apps/audits/api.py index 5a665777b..8bdc7e070 100644 --- a/apps/audits/api.py +++ b/apps/audits/api.py @@ -31,7 +31,7 @@ from terminal.models import default_storage from users.models import User from .backends import TYPE_ENGINE_MAPPING from .const import ActivityChoices -from .filters import UserSessionFilterSet +from .filters import UserSessionFilterSet, OperateLogFilterSet from .models import ( FTPLog, UserLoginLog, OperateLog, PasswordChangeLog, ActivityLog, JobLog, UserSession @@ -205,10 +205,7 @@ class OperateLogViewSet(OrgReadonlyModelViewSet): date_range_filter_fields = [ ('datetime', ('date_from', 'date_to')) ] - filterset_fields = [ - 'user', 'action', 'resource_type', 'resource', - 'remote_addr' - ] + filterset_class = OperateLogFilterSet search_fields = ['resource', 'user'] ordering = ['-datetime'] diff --git a/apps/audits/filters.py b/apps/audits/filters.py index 078e68c2c..b82eadad3 100644 --- a/apps/audits/filters.py +++ b/apps/audits/filters.py @@ -1,11 +1,13 @@ +from django.apps import apps +from django.utils import translation + from django_filters import rest_framework as drf_filters from rest_framework import filters from rest_framework.compat import coreapi, coreschema - from common.drf.filters import BaseFilterSet from common.sessions.cache import user_session_manager from orgs.utils import current_org -from .models import UserSession +from .models import UserSession, OperateLog __all__ = ['CurrentOrgMembersFilter'] @@ -50,3 +52,22 @@ class UserSessionFilterSet(BaseFilterSet): class Meta: model = UserSession fields = ['id', 'ip', 'city', 'type'] + + +class OperateLogFilterSet(BaseFilterSet): + resource_type = drf_filters.CharFilter(method='filter_resource_type') + + @staticmethod + def filter_resource_type(queryset, name, resource_type): + current_lang = translation.get_language() + with translation.override(current_lang): + mapper = {str(m._meta.verbose_name): m._meta.verbose_name_raw for m in apps.get_models()} + tp = mapper.get(resource_type) + queryset = queryset.filter(resource_type=tp) + return queryset + + class Meta: + model = OperateLog + fields = [ + 'user', 'action', 'resource', 'remote_addr' + ]