filtersets.py 2.9 KB

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