filters.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from __future__ import unicode_literals
  2. import django_filters
  3. from django.db.models import Q
  4. from dcim.models import Platform
  5. from extras.filters import CustomFieldFilterSet
  6. from tenancy.models import Tenant
  7. from utilities.filters import NullableModelMultipleChoiceFilter, NumericInFilter
  8. from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
  9. class ClusterFilter(CustomFieldFilterSet):
  10. id__in = NumericInFilter(name='id', lookup_expr='in')
  11. q = django_filters.CharFilter(
  12. method='search',
  13. label='Search',
  14. )
  15. group_id = NullableModelMultipleChoiceFilter(
  16. queryset=ClusterGroup.objects.all(),
  17. label='Parent group (ID)',
  18. )
  19. group = NullableModelMultipleChoiceFilter(
  20. queryset=ClusterGroup.objects.all(),
  21. to_field_name='slug',
  22. label='Parent group (slug)',
  23. )
  24. type_id = django_filters.ModelMultipleChoiceFilter(
  25. queryset=ClusterType.objects.all(),
  26. label='Cluster type (ID)',
  27. )
  28. type = django_filters.ModelMultipleChoiceFilter(
  29. name='type__slug',
  30. queryset=ClusterType.objects.all(),
  31. to_field_name='slug',
  32. label='Cluster type (slug)',
  33. )
  34. class Meta:
  35. model = Cluster
  36. fields = ['name']
  37. def search(self, queryset, name, value):
  38. if not value.strip():
  39. return queryset
  40. return queryset.filter(
  41. Q(name__icontains=value) |
  42. Q(comments__icontains=value)
  43. )
  44. class VirtualMachineFilter(CustomFieldFilterSet):
  45. id__in = NumericInFilter(name='id', lookup_expr='in')
  46. q = django_filters.CharFilter(
  47. method='search',
  48. label='Search',
  49. )
  50. cluster_group_id = NullableModelMultipleChoiceFilter(
  51. name='cluster__group',
  52. queryset=ClusterGroup.objects.all(),
  53. label='Cluster group (ID)',
  54. )
  55. cluster_group = NullableModelMultipleChoiceFilter(
  56. name='cluster__group__slug',
  57. queryset=ClusterGroup.objects.all(),
  58. to_field_name='slug',
  59. label='Cluster group (slug)',
  60. )
  61. tenant_id = NullableModelMultipleChoiceFilter(
  62. queryset=Tenant.objects.all(),
  63. label='Tenant (ID)',
  64. )
  65. tenant = NullableModelMultipleChoiceFilter(
  66. queryset=Tenant.objects.all(),
  67. to_field_name='slug',
  68. label='Tenant (slug)',
  69. )
  70. platform_id = NullableModelMultipleChoiceFilter(
  71. queryset=Platform.objects.all(),
  72. label='Platform (ID)',
  73. )
  74. platform = NullableModelMultipleChoiceFilter(
  75. name='platform',
  76. queryset=Platform.objects.all(),
  77. to_field_name='slug',
  78. label='Platform (slug)',
  79. )
  80. class Meta:
  81. model = VirtualMachine
  82. fields = ['name', 'cluster']
  83. def search(self, queryset, name, value):
  84. if not value.strip():
  85. return queryset
  86. return queryset.filter(
  87. Q(name__icontains=value) |
  88. Q(comments__icontains=value)
  89. )