filters.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. # coding=utf-8
  2. import django_filters
  3. import datetime
  4. from django.utils import timezone
  5. from django.db.models import Q
  6. from django.contrib.auth import get_user_model
  7. from .models import Department
  8. User = get_user_model()
  9. class UserFilter(django_filters.FilterSet):
  10. username = django_filters.CharFilter(field_name='username', lookup_expr='icontains')
  11. name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
  12. is_active = django_filters.CharFilter(field_name='is_active')
  13. department = django_filters.CharFilter(field_name='department_id')
  14. online = django_filters.CharFilter(method='online_filter')
  15. class Meta:
  16. model = User
  17. fields = ['username', 'name', 'is_active', 'type', ]
  18. def online_filter(self, queryset, name,value):
  19. start = timezone.now() - datetime.timedelta(hours=0, minutes=10, seconds=0)
  20. if value == '0':
  21. queryset = queryset.filter( Q(status__isnull=True) | Q(status=User.OFFLINE)| Q(last_refresh__lt=start) )
  22. elif value == '1':
  23. queryset = queryset.filter(status=User.ONLINE, last_refresh__gt=start)
  24. return queryset
  25. class DepartmentFilter(django_filters.FilterSet):
  26. name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
  27. class Meta:
  28. model = Department
  29. fields = ['name',]