# coding=utf-8 import django_filters import datetime from django.utils import timezone from django.db.models import Q from django.contrib.auth import get_user_model from .models import Department User = get_user_model() class UserFilter(django_filters.FilterSet): username = django_filters.CharFilter(field_name='username', lookup_expr='icontains') name = django_filters.CharFilter(field_name='name', lookup_expr='icontains') is_active = django_filters.CharFilter(field_name='is_active') department = django_filters.CharFilter(field_name='department_id') online = django_filters.CharFilter(method='online_filter') class Meta: model = User fields = ['username', 'name', 'is_active', 'type', ] def online_filter(self, queryset, name,value): start = timezone.now() - datetime.timedelta(hours=0, minutes=10, seconds=0) if value == '0': queryset = queryset.filter( Q(status__isnull=True) | Q(status=User.OFFLINE)| Q(last_refresh__lt=start) ) elif value == '1': queryset = queryset.filter(status=User.ONLINE, last_refresh__gt=start) return queryset class DepartmentFilter(django_filters.FilterSet): name = django_filters.CharFilter(field_name='name', lookup_expr='icontains') class Meta: model = Department fields = ['name',]