base_filtersets.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import django_filters
  2. from django.utils.translation import gettext as _
  3. from netbox.filtersets import BaseFilterSet
  4. from utilities.filters import ContentTypeFilter, TreeNodeMultipleChoiceFilter
  5. from .models import *
  6. __all__ = (
  7. 'ScopedFilterSet',
  8. )
  9. class ScopedFilterSet(BaseFilterSet):
  10. """
  11. Provides additional filtering functionality for location, site, etc.. for Scoped models.
  12. """
  13. scope_type = ContentTypeFilter()
  14. region_id = TreeNodeMultipleChoiceFilter(
  15. queryset=Region.objects.all(),
  16. field_name='_region',
  17. lookup_expr='in',
  18. label=_('Region (ID)'),
  19. )
  20. region = TreeNodeMultipleChoiceFilter(
  21. queryset=Region.objects.all(),
  22. field_name='_region',
  23. lookup_expr='in',
  24. to_field_name='slug',
  25. label=_('Region (slug)'),
  26. )
  27. site_group_id = TreeNodeMultipleChoiceFilter(
  28. queryset=SiteGroup.objects.all(),
  29. field_name='_site_group',
  30. lookup_expr='in',
  31. label=_('Site group (ID)'),
  32. )
  33. site_group = TreeNodeMultipleChoiceFilter(
  34. queryset=SiteGroup.objects.all(),
  35. field_name='_site_group',
  36. lookup_expr='in',
  37. to_field_name='slug',
  38. label=_('Site group (slug)'),
  39. )
  40. site_id = django_filters.ModelMultipleChoiceFilter(
  41. queryset=Site.objects.all(),
  42. field_name='_site',
  43. label=_('Site (ID)'),
  44. )
  45. site = django_filters.ModelMultipleChoiceFilter(
  46. field_name='_site__slug',
  47. queryset=Site.objects.all(),
  48. to_field_name='slug',
  49. label=_('Site (slug)'),
  50. )
  51. location_id = TreeNodeMultipleChoiceFilter(
  52. queryset=Location.objects.all(),
  53. field_name='_location',
  54. lookup_expr='in',
  55. label=_('Location (ID)'),
  56. )
  57. location = TreeNodeMultipleChoiceFilter(
  58. queryset=Location.objects.all(),
  59. field_name='_location',
  60. lookup_expr='in',
  61. to_field_name='slug',
  62. label=_('Location (slug)'),
  63. )