filtersets.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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, Token
  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 TokenFilterSet(BaseFilterSet):
  52. q = django_filters.CharFilter(
  53. method='search',
  54. label='Search',
  55. )
  56. user_id = django_filters.ModelMultipleChoiceFilter(
  57. field_name='user',
  58. queryset=User.objects.all(),
  59. label='User',
  60. )
  61. user = django_filters.ModelMultipleChoiceFilter(
  62. field_name='user__username',
  63. queryset=User.objects.all(),
  64. to_field_name='username',
  65. label='User (name)',
  66. )
  67. created = django_filters.DateTimeFilter()
  68. created__gte = django_filters.DateTimeFilter(
  69. field_name='created',
  70. lookup_expr='gte'
  71. )
  72. created__lte = django_filters.DateTimeFilter(
  73. field_name='created',
  74. lookup_expr='lte'
  75. )
  76. expires = django_filters.DateTimeFilter()
  77. expires__gte = django_filters.DateTimeFilter(
  78. field_name='expires',
  79. lookup_expr='gte'
  80. )
  81. expires__lte = django_filters.DateTimeFilter(
  82. field_name='expires',
  83. lookup_expr='lte'
  84. )
  85. class Meta:
  86. model = Token
  87. fields = ['id', 'key', 'write_enabled']
  88. class ObjectPermissionFilterSet(BaseFilterSet):
  89. user_id = django_filters.ModelMultipleChoiceFilter(
  90. field_name='users',
  91. queryset=User.objects.all(),
  92. label='User',
  93. )
  94. user = django_filters.ModelMultipleChoiceFilter(
  95. field_name='users__username',
  96. queryset=User.objects.all(),
  97. to_field_name='username',
  98. label='User (name)',
  99. )
  100. group_id = django_filters.ModelMultipleChoiceFilter(
  101. field_name='groups',
  102. queryset=Group.objects.all(),
  103. label='Group',
  104. )
  105. group = django_filters.ModelMultipleChoiceFilter(
  106. field_name='groups__name',
  107. queryset=Group.objects.all(),
  108. to_field_name='name',
  109. label='Group (name)',
  110. )
  111. class Meta:
  112. model = ObjectPermission
  113. fields = ['id', 'name', 'enabled', 'object_types']