From 9e62d1ad8f864802cd627ba5e62a3a6e9d9b9422 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 9 Apr 2021 09:43:35 -0400 Subject: [PATCH] Fixes #6130: Improve display of assigned models in custom fields list --- docs/release-notes/version-2.11.md | 1 + netbox/extras/admin.py | 5 ++++- netbox/utilities/forms/fields.py | 4 ++-- netbox/utilities/utils.py | 8 ++++++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/release-notes/version-2.11.md b/docs/release-notes/version-2.11.md index 356577d09..ec53dee25 100644 --- a/docs/release-notes/version-2.11.md +++ b/docs/release-notes/version-2.11.md @@ -15,6 +15,7 @@ * [#6106](https://github.com/netbox-community/netbox/issues/6106) - Allow assigning a virtual interface as the parent of an existing interface * [#6107](https://github.com/netbox-community/netbox/issues/6107) - Fix rack selection field on device form * [#6110](https://github.com/netbox-community/netbox/issues/6110) - Fix handling of TemplateColumn values for table export +* [#6130](https://github.com/netbox-community/netbox/issues/6130) - Improve display of assigned models in custom fields list --- diff --git a/netbox/extras/admin.py b/netbox/extras/admin.py index 90e7541e2..0ceb1cc5b 100644 --- a/netbox/extras/admin.py +++ b/netbox/extras/admin.py @@ -1,8 +1,10 @@ from django import forms from django.contrib import admin from django.contrib.contenttypes.models import ContentType +from django.utils.safestring import mark_safe from utilities.forms import ContentTypeChoiceField, ContentTypeMultipleChoiceField, LaxURLField +from utilities.utils import content_type_name from .models import CustomField, CustomLink, ExportTemplate, JobResult, Webhook from .utils import FeatureQuery @@ -110,7 +112,8 @@ class CustomFieldAdmin(admin.ModelAdmin): ) def models(self, obj): - return ', '.join([ct.name for ct in obj.content_types.all()]) + ct_names = [content_type_name(ct) for ct in obj.content_types.all()] + return mark_safe('
'.join(ct_names)) # diff --git a/netbox/utilities/forms/fields.py b/netbox/utilities/forms/fields.py index bb74ead99..9bc0e3df7 100644 --- a/netbox/utilities/forms/fields.py +++ b/netbox/utilities/forms/fields.py @@ -13,6 +13,7 @@ from django.forms import BoundField from django.urls import reverse from utilities.choices import unpack_grouped_choices +from utilities.utils import content_type_name from utilities.validators import EnhancedURLValidator from . import widgets from .constants import * @@ -124,8 +125,7 @@ class ContentTypeChoiceMixin: def label_from_instance(self, obj): try: - meta = obj.model_class()._meta - return f'{meta.app_config.verbose_name} > {meta.verbose_name}' + return content_type_name(obj) except AttributeError: return super().label_from_instance(obj) diff --git a/netbox/utilities/utils.py b/netbox/utilities/utils.py index f0340f094..e21b9a36d 100644 --- a/netbox/utilities/utils.py +++ b/netbox/utilities/utils.py @@ -296,6 +296,14 @@ def array_to_string(array): return ', '.join('-'.join(map(str, (g[0], g[-1])[:len(g)])) for g in group) +def content_type_name(contenttype): + """ + Return a proper ContentType name. + """ + meta = contenttype.model_class()._meta + return f'{meta.app_config.verbose_name} > {meta.verbose_name}' + + # # Fake request object #