filtersets.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import django_filters
  2. from django.db.models import Q
  3. from extras.filters import TagFilter
  4. from netbox.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
  5. from utilities.filters import TreeNodeMultipleChoiceFilter
  6. from .models import Tenant, TenantGroup
  7. __all__ = (
  8. 'TenancyFilterSet',
  9. 'TenantFilterSet',
  10. 'TenantGroupFilterSet',
  11. )
  12. class TenantGroupFilterSet(OrganizationalModelFilterSet):
  13. parent_id = django_filters.ModelMultipleChoiceFilter(
  14. queryset=TenantGroup.objects.all(),
  15. label='Tenant group (ID)',
  16. )
  17. parent = django_filters.ModelMultipleChoiceFilter(
  18. field_name='parent__slug',
  19. queryset=TenantGroup.objects.all(),
  20. to_field_name='slug',
  21. label='Tenant group group (slug)',
  22. )
  23. class Meta:
  24. model = TenantGroup
  25. fields = ['id', 'name', 'slug', 'description']
  26. class TenantFilterSet(PrimaryModelFilterSet):
  27. q = django_filters.CharFilter(
  28. method='search',
  29. label='Search',
  30. )
  31. group_id = TreeNodeMultipleChoiceFilter(
  32. queryset=TenantGroup.objects.all(),
  33. field_name='group',
  34. lookup_expr='in',
  35. label='Tenant group (ID)',
  36. )
  37. group = TreeNodeMultipleChoiceFilter(
  38. queryset=TenantGroup.objects.all(),
  39. field_name='group',
  40. lookup_expr='in',
  41. to_field_name='slug',
  42. label='Tenant group (slug)',
  43. )
  44. tag = TagFilter()
  45. class Meta:
  46. model = Tenant
  47. fields = ['id', 'name', 'slug']
  48. def search(self, queryset, name, value):
  49. if not value.strip():
  50. return queryset
  51. return queryset.filter(
  52. Q(name__icontains=value) |
  53. Q(slug__icontains=value) |
  54. Q(description__icontains=value) |
  55. Q(comments__icontains=value)
  56. )
  57. class TenancyFilterSet(django_filters.FilterSet):
  58. """
  59. An inheritable FilterSet for models which support Tenant assignment.
  60. """
  61. tenant_group_id = TreeNodeMultipleChoiceFilter(
  62. queryset=TenantGroup.objects.all(),
  63. field_name='tenant__group',
  64. lookup_expr='in',
  65. label='Tenant Group (ID)',
  66. )
  67. tenant_group = TreeNodeMultipleChoiceFilter(
  68. queryset=TenantGroup.objects.all(),
  69. field_name='tenant__group',
  70. to_field_name='slug',
  71. lookup_expr='in',
  72. label='Tenant Group (slug)',
  73. )
  74. tenant_id = django_filters.ModelMultipleChoiceFilter(
  75. queryset=Tenant.objects.all(),
  76. label='Tenant (ID)',
  77. )
  78. tenant = django_filters.ModelMultipleChoiceFilter(
  79. queryset=Tenant.objects.all(),
  80. field_name='tenant__slug',
  81. to_field_name='slug',
  82. label='Tenant (slug)',
  83. )