filters.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import django_filters
  2. from django.db.models import Q
  3. from dcim.models import Device
  4. from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
  5. from utilities.filters import BaseFilterSet, NameSlugSearchFilterSet, TagFilter
  6. from .models import Secret, SecretRole
  7. __all__ = (
  8. 'SecretFilterSet',
  9. 'SecretRoleFilterSet',
  10. )
  11. class SecretRoleFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
  12. class Meta:
  13. model = SecretRole
  14. fields = ['id', 'name', 'slug']
  15. class SecretFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
  16. q = django_filters.CharFilter(
  17. method='search',
  18. label='Search',
  19. )
  20. role_id = django_filters.ModelMultipleChoiceFilter(
  21. queryset=SecretRole.objects.all(),
  22. label='Role (ID)',
  23. )
  24. role = django_filters.ModelMultipleChoiceFilter(
  25. field_name='role__slug',
  26. queryset=SecretRole.objects.all(),
  27. to_field_name='slug',
  28. label='Role (slug)',
  29. )
  30. device_id = django_filters.ModelMultipleChoiceFilter(
  31. queryset=Device.objects.all(),
  32. label='Device (ID)',
  33. )
  34. device = django_filters.ModelMultipleChoiceFilter(
  35. field_name='device__name',
  36. queryset=Device.objects.all(),
  37. to_field_name='name',
  38. label='Device (name)',
  39. )
  40. tag = TagFilter()
  41. class Meta:
  42. model = Secret
  43. fields = ['name']
  44. def search(self, queryset, name, value):
  45. if not value.strip():
  46. return queryset
  47. return queryset.filter(
  48. Q(name__icontains=value) |
  49. Q(device__name__icontains=value)
  50. )