From 94b8d360656656665a97ad5c3db8ef059008058b Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Thu, 26 Aug 2021 12:55:37 -0400 Subject: [PATCH] Introduce ContentTypesColumn for custom field and webhook tables --- netbox/extras/models/customfields.py | 1 - netbox/extras/tables.py | 17 +++++++++++------ netbox/utilities/tables.py | 12 +++++++++++- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index 47480ed19..d8e2e11c9 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -35,7 +35,6 @@ class CustomField(ChangeLoggedModel): content_types = models.ManyToManyField( to=ContentType, related_name='custom_fields', - verbose_name='Object(s)', limit_choices_to=FeatureQuery('custom_fields'), help_text='The object(s) to which this field applies.' ) diff --git a/netbox/extras/tables.py b/netbox/extras/tables.py index a3c103773..952189003 100644 --- a/netbox/extras/tables.py +++ b/netbox/extras/tables.py @@ -2,7 +2,8 @@ import django_tables2 as tables from django.conf import settings from utilities.tables import ( - BaseTable, BooleanColumn, ButtonsColumn, ChoiceFieldColumn, ColorColumn, ContentTypeColumn, ToggleColumn, + BaseTable, BooleanColumn, ButtonsColumn, ChoiceFieldColumn, ColorColumn, ContentTypeColumn, ContentTypesColumn, + ToggleColumn, ) from .models import * @@ -37,14 +38,16 @@ class CustomFieldTable(BaseTable): name = tables.Column( linkify=True ) + content_types = ContentTypesColumn() required = BooleanColumn() class Meta(BaseTable.Meta): model = CustomField fields = ( - 'pk', 'name', 'label', 'type', 'required', 'weight', 'default', 'description', 'filter_logic', 'choices', + 'pk', 'name', 'content_types', 'label', 'type', 'required', 'weight', 'default', 'description', + 'filter_logic', 'choices', ) - default_columns = ('pk', 'name', 'label', 'type', 'required', 'description') + default_columns = ('pk', 'name', 'content_types', 'label', 'type', 'required', 'description') # @@ -98,6 +101,7 @@ class WebhookTable(BaseTable): name = tables.Column( linkify=True ) + content_types = ContentTypesColumn() enabled = BooleanColumn() type_create = BooleanColumn() type_update = BooleanColumn() @@ -106,11 +110,12 @@ class WebhookTable(BaseTable): class Meta(BaseTable.Meta): model = Webhook fields = ( - 'pk', 'name', 'enabled', 'type_create', 'type_update', 'type_delete', 'http_method', 'payload_url', - 'secret', 'ssl_validation', 'ca_file_path', + 'pk', 'name', 'content_types', 'enabled', 'type_create', 'type_update', 'type_delete', 'http_method', + 'payload_url', 'secret', 'ssl_validation', 'ca_file_path', ) default_columns = ( - 'pk', 'name', 'enabled', 'type_create', 'type_update', 'type_delete', 'http_method', 'payload_url', + 'pk', 'name', 'content_types', 'enabled', 'type_create', 'type_update', 'type_delete', 'http_method', + 'payload_url', ) diff --git a/netbox/utilities/tables.py b/netbox/utilities/tables.py index 120330520..26a16c171 100644 --- a/netbox/utilities/tables.py +++ b/netbox/utilities/tables.py @@ -12,6 +12,8 @@ from django_tables2.data import TableQuerysetData from django_tables2.utils import Accessor from extras.models import CustomField +from extras.utils import FeatureQuery +from .utils import content_type_name from .paginator import EnhancedPaginator, get_paginate_count @@ -235,12 +237,20 @@ class ContentTypeColumn(tables.Column): Display a ContentType instance. """ def render(self, value): - return value.name[0].upper() + value.name[1:] + return content_type_name(value) def value(self, value): return f"{value.app_label}.{value.model}" +class ContentTypesColumn(tables.ManyToManyColumn): + """ + Display a list of ContentType instances. + """ + def transform(self, obj): + return content_type_name(obj) + + class ColorColumn(tables.Column): """ Display a color (#RRGGBB).