filters.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import django_filters
  2. from django.db.models import Q
  3. from .models import Secret, SecretRole
  4. from dcim.models import Device
  5. class SecretFilter(django_filters.FilterSet):
  6. q = django_filters.CharFilter(
  7. method='search',
  8. label='Search',
  9. )
  10. role_id = django_filters.ModelMultipleChoiceFilter(
  11. name='role',
  12. queryset=SecretRole.objects.all(),
  13. label='Role (ID)',
  14. )
  15. role = django_filters.ModelMultipleChoiceFilter(
  16. name='role__slug',
  17. queryset=SecretRole.objects.all(),
  18. to_field_name='slug',
  19. label='Role (slug)',
  20. )
  21. device_id = django_filters.ModelMultipleChoiceFilter(
  22. name='device',
  23. queryset=Device.objects.all(),
  24. label='Device (ID)',
  25. )
  26. device = django_filters.ModelMultipleChoiceFilter(
  27. name='device',
  28. queryset=Device.objects.all(),
  29. to_field_name='name',
  30. label='Device (name)',
  31. )
  32. class Meta:
  33. model = Secret
  34. fields = ['name']
  35. def search(self, queryset, name, value):
  36. if not value.strip():
  37. return queryset
  38. return queryset.filter(
  39. Q(name__icontains=value) |
  40. Q(device__name__icontains=value)
  41. )