filtersets.py 3.5 KB

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