filters.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. from __future__ import unicode_literals
  2. import django_filters
  3. from django.db.models import Q
  4. from dcim.models import Site
  5. from extras.filters import CustomFieldFilterSet
  6. from tenancy.models import Tenant
  7. from utilities.filters import NullableModelMultipleChoiceFilter, NumericInFilter
  8. from .models import Provider, Circuit, CircuitTermination, CircuitType
  9. class ProviderFilter(CustomFieldFilterSet, django_filters.FilterSet):
  10. id__in = NumericInFilter(name='id', lookup_expr='in')
  11. q = django_filters.CharFilter(
  12. method='search',
  13. label='Search',
  14. )
  15. site_id = django_filters.ModelMultipleChoiceFilter(
  16. name='circuits__terminations__site',
  17. queryset=Site.objects.all(),
  18. label='Site',
  19. )
  20. site = django_filters.ModelMultipleChoiceFilter(
  21. name='circuits__terminations__site__slug',
  22. queryset=Site.objects.all(),
  23. to_field_name='slug',
  24. label='Site (slug)',
  25. )
  26. class Meta:
  27. model = Provider
  28. fields = ['name', 'account', 'asn']
  29. def search(self, queryset, name, value):
  30. if not value.strip():
  31. return queryset
  32. return queryset.filter(
  33. Q(name__icontains=value) |
  34. Q(account__icontains=value) |
  35. Q(comments__icontains=value)
  36. )
  37. class CircuitFilter(CustomFieldFilterSet, django_filters.FilterSet):
  38. id__in = NumericInFilter(name='id', lookup_expr='in')
  39. q = django_filters.CharFilter(
  40. method='search',
  41. label='Search',
  42. )
  43. provider_id = django_filters.ModelMultipleChoiceFilter(
  44. name='provider',
  45. queryset=Provider.objects.all(),
  46. label='Provider (ID)',
  47. )
  48. provider = django_filters.ModelMultipleChoiceFilter(
  49. name='provider__slug',
  50. queryset=Provider.objects.all(),
  51. to_field_name='slug',
  52. label='Provider (slug)',
  53. )
  54. type_id = django_filters.ModelMultipleChoiceFilter(
  55. name='type',
  56. queryset=CircuitType.objects.all(),
  57. label='Circuit type (ID)',
  58. )
  59. type = django_filters.ModelMultipleChoiceFilter(
  60. name='type__slug',
  61. queryset=CircuitType.objects.all(),
  62. to_field_name='slug',
  63. label='Circuit type (slug)',
  64. )
  65. tenant_id = NullableModelMultipleChoiceFilter(
  66. name='tenant',
  67. queryset=Tenant.objects.all(),
  68. label='Tenant (ID)',
  69. )
  70. tenant = NullableModelMultipleChoiceFilter(
  71. name='tenant',
  72. queryset=Tenant.objects.all(),
  73. to_field_name='slug',
  74. label='Tenant (slug)',
  75. )
  76. site_id = django_filters.ModelMultipleChoiceFilter(
  77. name='terminations__site',
  78. queryset=Site.objects.all(),
  79. label='Site (ID)',
  80. )
  81. site = django_filters.ModelMultipleChoiceFilter(
  82. name='terminations__site__slug',
  83. queryset=Site.objects.all(),
  84. to_field_name='slug',
  85. label='Site (slug)',
  86. )
  87. class Meta:
  88. model = Circuit
  89. fields = ['install_date']
  90. def search(self, queryset, name, value):
  91. if not value.strip():
  92. return queryset
  93. return queryset.filter(
  94. Q(cid__icontains=value) |
  95. Q(terminations__xconnect_id__icontains=value) |
  96. Q(terminations__pp_info__icontains=value) |
  97. Q(description__icontains=value) |
  98. Q(comments__icontains=value)
  99. ).distinct()
  100. class CircuitTerminationFilter(django_filters.FilterSet):
  101. circuit_id = django_filters.ModelMultipleChoiceFilter(
  102. name='circuit',
  103. queryset=Circuit.objects.all(),
  104. label='Circuit',
  105. )
  106. class Meta:
  107. model = CircuitTermination
  108. fields = ['term_side', 'site']