filters.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import django_filters
  2. from django.db.models import Q
  3. from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
  4. from utilities.filters import BaseFilterSet, NameSlugSearchFilterSet, NumericInFilter, TagFilter
  5. from .models import Tenant, TenantGroup
  6. __all__ = (
  7. 'TenancyFilterSet',
  8. 'TenantFilterSet',
  9. 'TenantGroupFilterSet',
  10. )
  11. class TenantGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet):
  12. class Meta:
  13. model = TenantGroup
  14. fields = ['id', 'name', 'slug']
  15. class TenantFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
  16. id__in = NumericInFilter(
  17. field_name='id',
  18. lookup_expr='in'
  19. )
  20. q = django_filters.CharFilter(
  21. method='search',
  22. label='Search',
  23. )
  24. group_id = django_filters.ModelMultipleChoiceFilter(
  25. queryset=TenantGroup.objects.all(),
  26. label='Group (ID)',
  27. )
  28. group = django_filters.ModelMultipleChoiceFilter(
  29. field_name='group__slug',
  30. queryset=TenantGroup.objects.all(),
  31. to_field_name='slug',
  32. label='Group (slug)',
  33. )
  34. tag = TagFilter()
  35. class Meta:
  36. model = Tenant
  37. fields = ['name', 'slug']
  38. def search(self, queryset, name, value):
  39. if not value.strip():
  40. return queryset
  41. return queryset.filter(
  42. Q(name__icontains=value) |
  43. Q(slug__icontains=value) |
  44. Q(description__icontains=value) |
  45. Q(comments__icontains=value)
  46. )
  47. class TenancyFilterSet(django_filters.FilterSet):
  48. """
  49. An inheritable FilterSet for models which support Tenant assignment.
  50. """
  51. tenant_group_id = django_filters.ModelMultipleChoiceFilter(
  52. field_name='tenant__group__id',
  53. queryset=TenantGroup.objects.all(),
  54. to_field_name='id',
  55. label='Tenant Group (ID)',
  56. )
  57. tenant_group = django_filters.ModelMultipleChoiceFilter(
  58. field_name='tenant__group__slug',
  59. queryset=TenantGroup.objects.all(),
  60. to_field_name='slug',
  61. label='Tenant Group (slug)',
  62. )
  63. tenant_id = django_filters.ModelMultipleChoiceFilter(
  64. queryset=Tenant.objects.all(),
  65. label='Tenant (ID)',
  66. )
  67. tenant = django_filters.ModelMultipleChoiceFilter(
  68. field_name='tenant__slug',
  69. queryset=Tenant.objects.all(),
  70. to_field_name='slug',
  71. label='Tenant (slug)',
  72. )