filters.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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 virtualization.models import VirtualMachine
  7. from .models import Secret, SecretRole
  8. __all__ = (
  9. 'SecretFilterSet',
  10. 'SecretRoleFilterSet',
  11. )
  12. class SecretRoleFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
  13. class Meta:
  14. model = SecretRole
  15. fields = ['id', 'name', 'slug']
  16. class SecretFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
  17. q = django_filters.CharFilter(
  18. method='search',
  19. label='Search',
  20. )
  21. role_id = django_filters.ModelMultipleChoiceFilter(
  22. queryset=SecretRole.objects.all(),
  23. label='Role (ID)',
  24. )
  25. role = django_filters.ModelMultipleChoiceFilter(
  26. field_name='role__slug',
  27. queryset=SecretRole.objects.all(),
  28. to_field_name='slug',
  29. label='Role (slug)',
  30. )
  31. device = django_filters.ModelMultipleChoiceFilter(
  32. field_name='device__name',
  33. queryset=Device.objects.all(),
  34. to_field_name='name',
  35. label='Device (name)',
  36. )
  37. device_id = django_filters.ModelMultipleChoiceFilter(
  38. field_name='device',
  39. queryset=Device.objects.all(),
  40. label='Device (ID)',
  41. )
  42. virtual_machine = django_filters.ModelMultipleChoiceFilter(
  43. field_name='virtual_machine__name',
  44. queryset=VirtualMachine.objects.all(),
  45. to_field_name='name',
  46. label='Virtual machine (name)',
  47. )
  48. virtual_machine_id = django_filters.ModelMultipleChoiceFilter(
  49. field_name='virtual_machine',
  50. queryset=VirtualMachine.objects.all(),
  51. label='Virtual machine (ID)',
  52. )
  53. tag = TagFilter()
  54. class Meta:
  55. model = Secret
  56. fields = ['id', 'name']
  57. def search(self, queryset, name, value):
  58. if not value.strip():
  59. return queryset
  60. return queryset.filter(
  61. Q(name__icontains=value) |
  62. Q(device__name__icontains=value)
  63. )