filtersets.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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. def search(self, queryset, name, value):
  89. if not value.strip():
  90. return queryset
  91. return queryset.filter(
  92. Q(user__username__icontains=value) |
  93. Q(description__icontains=value)
  94. )
  95. class ObjectPermissionFilterSet(BaseFilterSet):
  96. q = django_filters.CharFilter(
  97. method='search',
  98. label='Search',
  99. )
  100. user_id = django_filters.ModelMultipleChoiceFilter(
  101. field_name='users',
  102. queryset=User.objects.all(),
  103. label='User',
  104. )
  105. user = django_filters.ModelMultipleChoiceFilter(
  106. field_name='users__username',
  107. queryset=User.objects.all(),
  108. to_field_name='username',
  109. label='User (name)',
  110. )
  111. group_id = django_filters.ModelMultipleChoiceFilter(
  112. field_name='groups',
  113. queryset=Group.objects.all(),
  114. label='Group',
  115. )
  116. group = django_filters.ModelMultipleChoiceFilter(
  117. field_name='groups__name',
  118. queryset=Group.objects.all(),
  119. to_field_name='name',
  120. label='Group (name)',
  121. )
  122. class Meta:
  123. model = ObjectPermission
  124. fields = ['id', 'name', 'enabled', 'object_types']
  125. def search(self, queryset, name, value):
  126. if not value.strip():
  127. return queryset
  128. return queryset.filter(
  129. Q(name__icontains=value) |
  130. Q(description__icontains=value)
  131. )