|
1 | 1 | import django_filters
|
2 | 2 | from django.contrib.auth import get_user_model
|
| 3 | +from django.contrib.contenttypes.models import ContentType |
3 | 4 | from django.utils.translation import gettext as _
|
4 | 5 |
|
| 6 | +from circuits.models import CircuitTermination |
5 | 7 | from extras.filtersets import LocalConfigContextFilterSet
|
6 | 8 | from extras.models import ConfigTemplate
|
7 | 9 | from ipam.filtersets import PrimaryIPFilterSet
|
@@ -1804,6 +1806,35 @@ class CableFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
1804 | 1806 | field_name='site__slug'
|
1805 | 1807 | )
|
1806 | 1808 |
|
| 1809 | + # Termination object filters |
| 1810 | + consoleport_id = MultiValueNumberFilter( |
| 1811 | + method='filter_by_consoleport' |
| 1812 | + ) |
| 1813 | + consoleserverport_id = MultiValueNumberFilter( |
| 1814 | + method='filter_by_consoleserverport' |
| 1815 | + ) |
| 1816 | + powerport_id = MultiValueNumberFilter( |
| 1817 | + method='filter_by_powerport' |
| 1818 | + ) |
| 1819 | + poweroutlet_id = MultiValueNumberFilter( |
| 1820 | + method='filter_by_powerport' |
| 1821 | + ) |
| 1822 | + interface_id = MultiValueNumberFilter( |
| 1823 | + method='filter_by_interface' |
| 1824 | + ) |
| 1825 | + frontport_id = MultiValueNumberFilter( |
| 1826 | + method='filter_by_frontport' |
| 1827 | + ) |
| 1828 | + rearport_id = MultiValueNumberFilter( |
| 1829 | + method='filter_by_rearport' |
| 1830 | + ) |
| 1831 | + powerfeed_id = MultiValueNumberFilter( |
| 1832 | + method='filter_by_powerfeed' |
| 1833 | + ) |
| 1834 | + circuittermination_id = MultiValueNumberFilter( |
| 1835 | + method='filter_by_circuittermination' |
| 1836 | + ) |
| 1837 | + |
1807 | 1838 | class Meta:
|
1808 | 1839 | model = Cable
|
1809 | 1840 | fields = ['id', 'label', 'length', 'length_unit', 'description']
|
@@ -1847,6 +1878,42 @@ def _unterminated(self, queryset, name, value):
|
1847 | 1878 | terminations__cable_end=CableEndChoices.SIDE_B
|
1848 | 1879 | )
|
1849 | 1880 |
|
| 1881 | + def filter_by_termination_object(self, queryset, model, value): |
| 1882 | + # Filter by specific termination object(s) |
| 1883 | + content_type = ContentType.objects.get_for_model(model) |
| 1884 | + cable_ids = CableTermination.objects.filter( |
| 1885 | + termination_type=content_type, |
| 1886 | + termination_id__in=value |
| 1887 | + ).values_list('cable', flat=True) |
| 1888 | + return queryset.filter(pk__in=cable_ids) |
| 1889 | + |
| 1890 | + def filter_by_consoleport(self, queryset, name, value): |
| 1891 | + return self.filter_by_termination_object(queryset, ConsolePort, value) |
| 1892 | + |
| 1893 | + def filter_by_consoleserverport(self, queryset, name, value): |
| 1894 | + return self.filter_by_termination_object(queryset, ConsoleServerPort, value) |
| 1895 | + |
| 1896 | + def filter_by_powerport(self, queryset, name, value): |
| 1897 | + return self.filter_by_termination_object(queryset, PowerPort, value) |
| 1898 | + |
| 1899 | + def filter_by_poweroutlet(self, queryset, name, value): |
| 1900 | + return self.filter_by_termination_object(queryset, PowerOutlet, value) |
| 1901 | + |
| 1902 | + def filter_by_interface(self, queryset, name, value): |
| 1903 | + return self.filter_by_termination_object(queryset, Interface, value) |
| 1904 | + |
| 1905 | + def filter_by_frontport(self, queryset, name, value): |
| 1906 | + return self.filter_by_termination_object(queryset, FrontPort, value) |
| 1907 | + |
| 1908 | + def filter_by_rearport(self, queryset, name, value): |
| 1909 | + return self.filter_by_termination_object(queryset, RearPort, value) |
| 1910 | + |
| 1911 | + def filter_by_powerfeed(self, queryset, name, value): |
| 1912 | + return self.filter_by_termination_object(queryset, PowerFeed, value) |
| 1913 | + |
| 1914 | + def filter_by_circuittermination(self, queryset, name, value): |
| 1915 | + return self.filter_by_termination_object(queryset, CircuitTermination, value) |
| 1916 | + |
1850 | 1917 |
|
1851 | 1918 | class CableTerminationFilterSet(BaseFilterSet):
|
1852 | 1919 | termination_type = ContentTypeFilter()
|
|
0 commit comments