filtersets.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import django_filters
  2. from django.db.models import Q
  3. from dcim.base_filtersets import ScopedFilterSet
  4. from dcim.choices import LinkStatusChoices
  5. from dcim.models import Interface
  6. from ipam.models import VLAN
  7. from netbox.filtersets import NestedGroupModelFilterSet, PrimaryModelFilterSet
  8. from tenancy.filtersets import TenancyFilterSet
  9. from utilities.filters import TreeNodeMultipleChoiceFilter
  10. from utilities.filtersets import register_filterset
  11. from .choices import *
  12. from .models import *
  13. __all__ = (
  14. 'WirelessLANFilterSet',
  15. 'WirelessLANGroupFilterSet',
  16. 'WirelessLinkFilterSet',
  17. )
  18. @register_filterset
  19. class WirelessLANGroupFilterSet(NestedGroupModelFilterSet):
  20. parent_id = django_filters.ModelMultipleChoiceFilter(
  21. queryset=WirelessLANGroup.objects.all(),
  22. distinct=False,
  23. )
  24. parent = django_filters.ModelMultipleChoiceFilter(
  25. field_name='parent__slug',
  26. queryset=WirelessLANGroup.objects.all(),
  27. distinct=False,
  28. to_field_name='slug'
  29. )
  30. ancestor_id = TreeNodeMultipleChoiceFilter(
  31. queryset=WirelessLANGroup.objects.all(),
  32. field_name='parent',
  33. lookup_expr='in'
  34. )
  35. ancestor = TreeNodeMultipleChoiceFilter(
  36. queryset=WirelessLANGroup.objects.all(),
  37. field_name='parent',
  38. lookup_expr='in',
  39. to_field_name='slug'
  40. )
  41. class Meta:
  42. model = WirelessLANGroup
  43. fields = ('id', 'name', 'slug', 'description')
  44. @register_filterset
  45. class WirelessLANFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilterSet):
  46. group_id = TreeNodeMultipleChoiceFilter(
  47. queryset=WirelessLANGroup.objects.all(),
  48. field_name='group',
  49. lookup_expr='in'
  50. )
  51. group = TreeNodeMultipleChoiceFilter(
  52. queryset=WirelessLANGroup.objects.all(),
  53. field_name='group',
  54. lookup_expr='in',
  55. to_field_name='slug'
  56. )
  57. status = django_filters.MultipleChoiceFilter(
  58. choices=WirelessLANStatusChoices,
  59. distinct=False,
  60. )
  61. vlan_id = django_filters.ModelMultipleChoiceFilter(
  62. queryset=VLAN.objects.all(),
  63. distinct=False,
  64. )
  65. interface_id = django_filters.ModelMultipleChoiceFilter(
  66. queryset=Interface.objects.all(),
  67. field_name='interfaces'
  68. )
  69. auth_type = django_filters.MultipleChoiceFilter(
  70. choices=WirelessAuthTypeChoices,
  71. distinct=False,
  72. )
  73. auth_cipher = django_filters.MultipleChoiceFilter(
  74. choices=WirelessAuthCipherChoices,
  75. distinct=False,
  76. )
  77. class Meta:
  78. model = WirelessLAN
  79. fields = ('id', 'ssid', 'auth_psk', 'scope_id', 'description')
  80. def search(self, queryset, name, value):
  81. if not value.strip():
  82. return queryset
  83. qs_filter = (
  84. Q(ssid__icontains=value) |
  85. Q(description__icontains=value)
  86. )
  87. return queryset.filter(qs_filter)
  88. @register_filterset
  89. class WirelessLinkFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
  90. interface_a_id = django_filters.ModelMultipleChoiceFilter(
  91. queryset=Interface.objects.all(),
  92. distinct=False,
  93. )
  94. interface_b_id = django_filters.ModelMultipleChoiceFilter(
  95. queryset=Interface.objects.all(),
  96. distinct=False,
  97. )
  98. status = django_filters.MultipleChoiceFilter(
  99. choices=LinkStatusChoices,
  100. distinct=False,
  101. )
  102. auth_type = django_filters.MultipleChoiceFilter(
  103. choices=WirelessAuthTypeChoices,
  104. distinct=False,
  105. )
  106. auth_cipher = django_filters.MultipleChoiceFilter(
  107. choices=WirelessAuthCipherChoices,
  108. distinct=False,
  109. )
  110. class Meta:
  111. model = WirelessLink
  112. fields = ('id', 'ssid', 'auth_psk', 'distance', 'distance_unit', 'description')
  113. def search(self, queryset, name, value):
  114. if not value.strip():
  115. return queryset
  116. qs_filter = (
  117. Q(ssid__icontains=value) |
  118. Q(description__icontains=value)
  119. )
  120. return queryset.filter(qs_filter)