diff --git a/netbox/templates/tenancy/tenantgroup.html b/netbox/templates/tenancy/tenantgroup.html
index 0567f2ab3..ecf95a024 100644
--- a/netbox/templates/tenancy/tenantgroup.html
+++ b/netbox/templates/tenancy/tenantgroup.html
@@ -40,6 +40,7 @@
{% include 'inc/panels/tags.html' %}
+ {% include 'inc/panels/comments.html' %}
{% plugin_left_page object %}
diff --git a/netbox/tenancy/api/serializers_/tenants.py b/netbox/tenancy/api/serializers_/tenants.py
index 54e906f1d..189397c70 100644
--- a/netbox/tenancy/api/serializers_/tenants.py
+++ b/netbox/tenancy/api/serializers_/tenants.py
@@ -19,7 +19,7 @@ class TenantGroupSerializer(NestedGroupModelSerializer):
model = TenantGroup
fields = [
'id', 'url', 'display_url', 'display', 'name', 'slug', 'parent', 'description', 'tags', 'custom_fields',
- 'created', 'last_updated', 'tenant_count', '_depth',
+ 'created', 'last_updated', 'tenant_count', 'comments', '_depth',
]
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'tenant_count', '_depth')
diff --git a/netbox/tenancy/filtersets.py b/netbox/tenancy/filtersets.py
index ff5563f1a..c70b381ee 100644
--- a/netbox/tenancy/filtersets.py
+++ b/netbox/tenancy/filtersets.py
@@ -202,6 +202,16 @@ class TenantGroupFilterSet(OrganizationalModelFilterSet):
model = TenantGroup
fields = ('id', 'name', 'slug', 'description')
+ def search(self, queryset, name, value):
+ if not value.strip():
+ return queryset
+ return queryset.filter(
+ Q(name__icontains=value) |
+ Q(slug__icontains=value) |
+ Q(description__icontains=value) |
+ Q(comments__icontains=value)
+ )
+
class TenantFilterSet(NetBoxModelFilterSet, ContactModelFilterSet):
group_id = TreeNodeMultipleChoiceFilter(
diff --git a/netbox/tenancy/forms/bulk_edit.py b/netbox/tenancy/forms/bulk_edit.py
index a8528aec8..3f72a30c1 100644
--- a/netbox/tenancy/forms/bulk_edit.py
+++ b/netbox/tenancy/forms/bulk_edit.py
@@ -33,9 +33,10 @@ class TenantGroupBulkEditForm(NetBoxModelBulkEditForm):
max_length=200,
required=False
)
+ comments = CommentField()
model = TenantGroup
- nullable_fields = ('parent', 'description')
+ nullable_fields = ('parent', 'description', 'comments')
class TenantBulkEditForm(NetBoxModelBulkEditForm):
diff --git a/netbox/tenancy/forms/bulk_import.py b/netbox/tenancy/forms/bulk_import.py
index d227cef14..61c56a70f 100644
--- a/netbox/tenancy/forms/bulk_import.py
+++ b/netbox/tenancy/forms/bulk_import.py
@@ -31,7 +31,7 @@ class TenantGroupImportForm(NetBoxModelImportForm):
class Meta:
model = TenantGroup
- fields = ('name', 'slug', 'parent', 'description', 'tags')
+ fields = ('name', 'slug', 'parent', 'description', 'tags', 'comments')
class TenantImportForm(NetBoxModelImportForm):
diff --git a/netbox/tenancy/forms/model_forms.py b/netbox/tenancy/forms/model_forms.py
index d65d47f1f..e31a28416 100644
--- a/netbox/tenancy/forms/model_forms.py
+++ b/netbox/tenancy/forms/model_forms.py
@@ -27,6 +27,7 @@ class TenantGroupForm(NetBoxModelForm):
required=False
)
slug = SlugField()
+ comments = CommentField()
fieldsets = (
FieldSet('parent', 'name', 'slug', 'description', 'tags', name=_('Tenant Group')),
@@ -35,7 +36,7 @@ class TenantGroupForm(NetBoxModelForm):
class Meta:
model = TenantGroup
fields = [
- 'parent', 'name', 'slug', 'description', 'tags',
+ 'parent', 'name', 'slug', 'description', 'tags', 'comments'
]
diff --git a/netbox/tenancy/search.py b/netbox/tenancy/search.py
index 5050114a6..f9441c974 100644
--- a/netbox/tenancy/search.py
+++ b/netbox/tenancy/search.py
@@ -60,5 +60,6 @@ class TenantGroupIndex(SearchIndex):
('name', 100),
('slug', 110),
('description', 500),
+ ('comments', 5000),
)
display_attrs = ('description',)
diff --git a/netbox/tenancy/tables/tenants.py b/netbox/tenancy/tables/tenants.py
index a10133a64..8c73fb5a6 100644
--- a/netbox/tenancy/tables/tenants.py
+++ b/netbox/tenancy/tables/tenants.py
@@ -28,7 +28,8 @@ class TenantGroupTable(NetBoxTable):
class Meta(NetBoxTable.Meta):
model = TenantGroup
fields = (
- 'pk', 'id', 'name', 'tenant_count', 'description', 'slug', 'tags', 'created', 'last_updated', 'actions',
+ 'pk', 'id', 'name', 'tenant_count', 'description', 'comments', 'slug', 'tags', 'created',
+ 'last_updated', 'actions',
)
default_columns = ('pk', 'name', 'tenant_count', 'description')
diff --git a/netbox/tenancy/tests/test_api.py b/netbox/tenancy/tests/test_api.py
index 4dc33f943..1804e0a8e 100644
--- a/netbox/tenancy/tests/test_api.py
+++ b/netbox/tenancy/tests/test_api.py
@@ -21,6 +21,7 @@ class TenantGroupTest(APIViewTestCases.APIViewTestCase):
brief_fields = ['_depth', 'description', 'display', 'id', 'name', 'slug', 'tenant_count', 'url']
bulk_update_data = {
'description': 'New description',
+ 'comments': 'New Comment',
}
@classmethod
@@ -28,12 +29,17 @@ class TenantGroupTest(APIViewTestCases.APIViewTestCase):
parent_tenant_groups = (
TenantGroup.objects.create(name='Parent Tenant Group 1', slug='parent-tenant-group-1'),
- TenantGroup.objects.create(name='Parent Tenant Group 2', slug='parent-tenant-group-2'),
+ TenantGroup.objects.create(
+ name='Parent Tenant Group 2', slug='parent-tenant-group-2', comments='Parent Group 2 comment',
+ ),
)
TenantGroup.objects.create(name='Tenant Group 1', slug='tenant-group-1', parent=parent_tenant_groups[0])
TenantGroup.objects.create(name='Tenant Group 2', slug='tenant-group-2', parent=parent_tenant_groups[0])
- TenantGroup.objects.create(name='Tenant Group 3', slug='tenant-group-3', parent=parent_tenant_groups[0])
+ TenantGroup.objects.create(
+ name='Tenant Group 3', slug='tenant-group-3', parent=parent_tenant_groups[0],
+ comments='Tenant Group 3 comment'
+ )
cls.create_data = [
{
@@ -50,6 +56,7 @@ class TenantGroupTest(APIViewTestCases.APIViewTestCase):
'name': 'Tenant Group 6',
'slug': 'tenant-group-6',
'parent': parent_tenant_groups[1].pk,
+ 'comments': 'Tenant Group 6 comment',
},
]
diff --git a/netbox/tenancy/tests/test_filtersets.py b/netbox/tenancy/tests/test_filtersets.py
index 97005dd1e..7d44ee45d 100644
--- a/netbox/tenancy/tests/test_filtersets.py
+++ b/netbox/tenancy/tests/test_filtersets.py
@@ -16,7 +16,7 @@ class TenantGroupTestCase(TestCase, ChangeLoggedFilterSetTests):
parent_tenant_groups = (
TenantGroup(name='Tenant Group 1', slug='tenant-group-1'),
- TenantGroup(name='Tenant Group 2', slug='tenant-group-2'),
+ TenantGroup(name='Tenant Group 2', slug='tenant-group-2', comments='Parent group 2 comment'),
TenantGroup(name='Tenant Group 3', slug='tenant-group-3'),
)
for tenant_group in parent_tenant_groups:
@@ -27,7 +27,8 @@ class TenantGroupTestCase(TestCase, ChangeLoggedFilterSetTests):
name='Tenant Group 1A',
slug='tenant-group-1a',
parent=parent_tenant_groups[0],
- description='foobar1'
+ description='foobar1',
+ comments='Tenant Group 1A comment',
),
TenantGroup(
name='Tenant Group 2A',
@@ -48,7 +49,10 @@ class TenantGroupTestCase(TestCase, ChangeLoggedFilterSetTests):
child_tenant_groups = (
TenantGroup(name='Tenant Group 1A1', slug='tenant-group-1a1', parent=tenant_groups[0]),
TenantGroup(name='Tenant Group 2A1', slug='tenant-group-2a1', parent=tenant_groups[1]),
- TenantGroup(name='Tenant Group 3A1', slug='tenant-group-3a1', parent=tenant_groups[2]),
+ TenantGroup(
+ name='Tenant Group 3A1', slug='tenant-group-3a1', parent=tenant_groups[2],
+ comments='Tenant Group 3A1 comment',
+ ),
)
for tenant_group in child_tenant_groups:
tenant_group.save()
@@ -57,6 +61,13 @@ class TenantGroupTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'q': 'foobar1'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
+ def test_q_comments(self):
+ params = {'q': 'parent'}
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
+
+ params = {'q': 'comment'}
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
+
def test_name(self):
params = {'name': ['Tenant Group 1', 'Tenant Group 2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
diff --git a/netbox/tenancy/tests/test_views.py b/netbox/tenancy/tests/test_views.py
index b67ea428b..726c9ad97 100644
--- a/netbox/tenancy/tests/test_views.py
+++ b/netbox/tenancy/tests/test_views.py
@@ -15,7 +15,7 @@ class TenantGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
tenant_groups = (
TenantGroup(name='Tenant Group 1', slug='tenant-group-1'),
- TenantGroup(name='Tenant Group 2', slug='tenant-group-2'),
+ TenantGroup(name='Tenant Group 2', slug='tenant-group-2', comments='Tenant Group 2 comment'),
TenantGroup(name='Tenant Group 3', slug='tenant-group-3'),
)
for tenanantgroup in tenant_groups:
@@ -28,24 +28,26 @@ class TenantGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
'slug': 'tenant-group-x',
'description': 'A new tenant group',
'tags': [t.pk for t in tags],
+ 'comments': 'Tenant Group X comment',
}
cls.csv_data = (
- "name,slug,description",
- "Tenant Group 4,tenant-group-4,Fourth tenant group",
- "Tenant Group 5,tenant-group-5,Fifth tenant group",
- "Tenant Group 6,tenant-group-6,Sixth tenant group",
+ "name,slug,description,comments",
+ "Tenant Group 4,tenant-group-4,Fourth tenant group,",
+ "Tenant Group 5,tenant-group-5,Fifth tenant group,",
+ "Tenant Group 6,tenant-group-6,Sixth tenant group,Sixth tenant group comment",
)
cls.csv_update_data = (
- "id,name,description",
- f"{tenant_groups[0].pk},Tenant Group 7,Fourth tenant group7",
- f"{tenant_groups[1].pk},Tenant Group 8,Fifth tenant group8",
- f"{tenant_groups[2].pk},Tenant Group 0,Sixth tenant group9",
+ "id,name,description,comments",
+ f"{tenant_groups[0].pk},Tenant Group 7,Fourth tenant group7,Group 7 comment",
+ f"{tenant_groups[1].pk},Tenant Group 8,Fifth tenant group8,",
+ f"{tenant_groups[2].pk},Tenant Group 0,Sixth tenant group9,",
)
cls.bulk_edit_data = {
'description': 'New description',
+ 'comments': 'New comment',
}