diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 63091c2a8..1162f66a5 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -558,6 +558,9 @@ class DeviceComponentFilterSet(django_filters.FilterSet): to_field_name='name', label='Device (name)', ) + tag = django_filters.CharFilter( + name='tags__slug', + ) class ConsolePortFilter(DeviceComponentFilterSet): @@ -616,6 +619,9 @@ class InterfaceFilter(django_filters.FilterSet): method='_mac_address', label='MAC address', ) + tag = django_filters.CharFilter( + name='tags__slug', + ) class Meta: model = Interface @@ -722,6 +728,9 @@ class VirtualChassisFilter(django_filters.FilterSet): to_field_name='slug', label='Tenant (slug)', ) + tag = django_filters.CharFilter( + name='tags__slug', + ) class Meta: model = VirtualChassis diff --git a/netbox/ipam/filters.py b/netbox/ipam/filters.py index 88463b336..0a8606e52 100644 --- a/netbox/ipam/filters.py +++ b/netbox/ipam/filters.py @@ -466,6 +466,9 @@ class ServiceFilter(django_filters.FilterSet): to_field_name='name', label='Virtual machine (name)', ) + tag = django_filters.CharFilter( + name='tags__slug', + ) class Meta: model = Service diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index 8a2f815ad..8209b2ffa 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -918,10 +918,11 @@ class VLANFilterForm(BootstrapMixin, CustomFieldFilterForm): # class ServiceForm(BootstrapMixin, CustomFieldForm): + tags = TagField(required=False) class Meta: model = Service - fields = ['name', 'protocol', 'port', 'ipaddresses', 'description'] + fields = ['name', 'protocol', 'port', 'ipaddresses', 'description', 'tags'] help_texts = { 'ipaddresses': "IP address assignment is optional. If no IPs are selected, the service is assumed to be " "reachable via all IPs assigned to the device.", diff --git a/netbox/ipam/models.py b/netbox/ipam/models.py index e1bd93f97..242acf184 100644 --- a/netbox/ipam/models.py +++ b/netbox/ipam/models.py @@ -877,6 +877,8 @@ class Service(ChangeLoggedModel, CustomFieldModel): object_id_field='obj_id' ) + tags = TaggableManager() + serializer = 'ipam.api.serializers.ServiceSerializer' class Meta: diff --git a/netbox/templates/dcim/interface_edit.html b/netbox/templates/dcim/interface_edit.html index 0e212cf3e..6423c61c2 100644 --- a/netbox/templates/dcim/interface_edit.html +++ b/netbox/templates/dcim/interface_edit.html @@ -16,6 +16,12 @@ {% render_field form.mode %} +