filtersets.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import django_filters
  2. from django.contrib.auth.models import Group, User
  3. from django.db.models import Q
  4. from netbox.filtersets import BaseFilterSet
  5. from users.models import ObjectPermission
  6. __all__ = (
  7. 'GroupFilterSet',
  8. 'ObjectPermissionFilterSet',
  9. 'UserFilterSet',
  10. )
  11. class GroupFilterSet(BaseFilterSet):
  12. q = django_filters.CharFilter(
  13. method='search',
  14. label='Search',
  15. )
  16. class Meta:
  17. model = Group
  18. fields = ['id', 'name']
  19. def search(self, queryset, name, value):
  20. if not value.strip():
  21. return queryset
  22. return queryset.filter(name__icontains=value)
  23. class UserFilterSet(BaseFilterSet):
  24. q = django_filters.CharFilter(
  25. method='search',
  26. label='Search',
  27. )
  28. group_id = django_filters.ModelMultipleChoiceFilter(
  29. field_name='groups',
  30. queryset=Group.objects.all(),
  31. label='Group',
  32. )
  33. group = django_filters.ModelMultipleChoiceFilter(
  34. field_name='groups__name',
  35. queryset=Group.objects.all(),
  36. to_field_name='name',
  37. label='Group (name)',
  38. )
  39. class Meta:
  40. model = User
  41. fields = ['id', 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active']
  42. def search(self, queryset, name, value):
  43. if not value.strip():
  44. return queryset
  45. return queryset.filter(
  46. Q(username__icontains=value) |
  47. Q(first_name__icontains=value) |
  48. Q(last_name__icontains=value) |
  49. Q(email__icontains=value)
  50. )
  51. class ObjectPermissionFilterSet(BaseFilterSet):
  52. user_id = django_filters.ModelMultipleChoiceFilter(
  53. field_name='users',
  54. queryset=User.objects.all(),
  55. label='User',
  56. )
  57. user = django_filters.ModelMultipleChoiceFilter(
  58. field_name='users__username',
  59. queryset=User.objects.all(),
  60. to_field_name='username',
  61. label='User (name)',
  62. )
  63. group_id = django_filters.ModelMultipleChoiceFilter(
  64. field_name='groups',
  65. queryset=Group.objects.all(),
  66. label='Group',
  67. )
  68. group = django_filters.ModelMultipleChoiceFilter(
  69. field_name='groups__name',
  70. queryset=Group.objects.all(),
  71. to_field_name='name',
  72. label='Group (name)',
  73. )
  74. class Meta:
  75. model = ObjectPermission
  76. fields = ['id', 'name', 'enabled', 'object_types']