You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jumpserver/apps/audits/filters.py

55 lines
1.7 KiB

from django.db.models import F, Value
from django.db.models.functions import Concat
from django_filters.rest_framework import CharFilter
from rest_framework import filters
from rest_framework.compat import coreapi, coreschema
from orgs.utils import current_org
from common.drf.filters import BaseFilterSet
__all__ = ['CurrentOrgMembersFilter']
class CurrentOrgMembersFilter(filters.BaseFilterBackend):
def get_schema_fields(self, view):
return [
coreapi.Field(
name='user', location='query', required=False, type='string',
schema=coreschema.String(
title='user',
description='user'
)
)
]
def _get_user_list(self):
users = current_org.get_members(exclude=('Auditor',))
return users
def filter_queryset(self, request, queryset, view):
user_id = request.GET.get('user')
if user_id:
queryset = queryset.filter(user=user_id)
else:
queryset = queryset.filter(user__in=self._get_user_list())
return queryset
#
# class CommandExecutionFilter(BaseFilterSet):
# hostname_ip = CharFilter(method='filter_hostname_ip')
#
# class Meta:
# model = CommandExecution.hosts.through
# fields = (
# 'id', 'asset', 'commandexecution', 'hostname_ip'
# )
#
# def filter_hostname_ip(self, queryset, name, value):
# queryset = queryset.annotate(
# hostname_ip=Concat(
# F('asset__hostname'), Value('('),
# F('asset__address'), Value(')')
# )
# ).filter(hostname_ip__icontains=value)
# return queryset