From 9a80a491c90bcdc3341a7c75f2f8bae93e32fba9 Mon Sep 17 00:00:00 2001 From: Christoph Schneider Date: Thu, 11 Aug 2022 14:11:41 +0200 Subject: [PATCH 1/6] re-enable markdown in custom columns --- netbox/netbox/tables/columns.py | 25 +++++++++++++++++++++++++ netbox/netbox/tables/tables.py | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index f78b9f37c..cc20bdd0c 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -550,3 +550,28 @@ class MarkdownColumn(tables.TemplateColumn): def value(self, value): return value + + +class CustomFieldMarkdownColumn(tables.TemplateColumn): + """ + Render a Markdown string in a longtext custom column. + """ + template_code = """ + {% if value %} + {{ value|markdown }} + {% else %} + — + {% endif %} + """ + + def __init__(self, customfield, *args, **kwargs): + self.customfield = customfield + kwargs['accessor'] = Accessor(f'custom_field_data__{customfield.name}') + kwargs['template_code'] = self.template_code + if 'verbose_name' not in kwargs: + kwargs['verbose_name'] = customfield.label or customfield.name + + super().__init__(*args, **kwargs) + + def value(self, value): + return value diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index 8c5fb039c..d55038c4d 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -7,6 +7,7 @@ from django.db.models.fields.related import RelatedField from django_tables2.data import TableQuerysetData from extras.models import CustomField, CustomLink +from extras.choices import CustomFieldTypeChoices from netbox.tables import columns from utilities.paginator import EnhancedPaginator, get_paginate_count @@ -180,7 +181,7 @@ class NetBoxTable(BaseTable): content_type = ContentType.objects.get_for_model(self._meta.model) custom_fields = CustomField.objects.filter(content_types=content_type) extra_columns.extend([ - (f'cf_{cf.name}', columns.CustomFieldColumn(cf)) for cf in custom_fields + (f'cf_{cf.name}', columns.CustomFieldMarkdownColumn(cf) if cf.type == CustomFieldTypeChoices.TYPE_LONGTEXT else columns.CustomFieldColumn(cf)) for cf in custom_fields ]) custom_links = CustomLink.objects.filter(content_type=content_type, enabled=True) extra_columns.extend([ From f942216f3f4931c0d1e835948478e976172713ab Mon Sep 17 00:00:00 2001 From: Christoph Schneider Date: Sat, 13 Aug 2022 13:54:38 +0200 Subject: [PATCH 2/6] re-enable markup in longtext custom columns --- netbox/netbox/tables/columns.py | 10 ++++++++++ netbox/netbox/tables/tables.py | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index cc20bdd0c..8b961219f 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -418,6 +418,14 @@ class CustomFieldColumn(tables.Column): """ Display custom fields in the appropriate format. """ + template_code = """ + {% if value %} + {{ value|markdown }} + {% else %} + — + {% endif %} + """ + def __init__(self, customfield, *args, **kwargs): self.customfield = customfield kwargs['accessor'] = Accessor(f'custom_field_data__{customfield.name}') @@ -445,6 +453,8 @@ class CustomFieldColumn(tables.Column): return mark_safe(', '.join( self._likify_item(obj) for obj in self.customfield.deserialize(value) )) + if self.customfield.type == CustomFieldTypeChoices.TYPE_LONGTEXT: + return Template(self.template_code).render(Context({"value": value})) if value is not None: obj = self.customfield.deserialize(value) return mark_safe(self._likify_item(obj)) diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index d55038c4d..deb0d8b90 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -181,7 +181,8 @@ class NetBoxTable(BaseTable): content_type = ContentType.objects.get_for_model(self._meta.model) custom_fields = CustomField.objects.filter(content_types=content_type) extra_columns.extend([ - (f'cf_{cf.name}', columns.CustomFieldMarkdownColumn(cf) if cf.type == CustomFieldTypeChoices.TYPE_LONGTEXT else columns.CustomFieldColumn(cf)) for cf in custom_fields + # (f'cf_{cf.name}', columns.CustomFieldMarkdownColumn(cf) if cf.type == CustomFieldTypeChoices.TYPE_LONGTEXT else columns.CustomFieldColumn(cf)) for cf in custom_fields + (f'cf_{cf.name}', columns.CustomFieldColumn(cf)) for cf in custom_fields ]) custom_links = CustomLink.objects.filter(content_type=content_type, enabled=True) extra_columns.extend([ From 6f09d94e2a99330ecd09e7d3ee0600fba8386716 Mon Sep 17 00:00:00 2001 From: Christoph Schneider Date: Sat, 13 Aug 2022 13:56:51 +0200 Subject: [PATCH 3/6] remove commented line --- netbox/netbox/tables/tables.py | 1 - 1 file changed, 1 deletion(-) diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index deb0d8b90..63aae1d19 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -181,7 +181,6 @@ class NetBoxTable(BaseTable): content_type = ContentType.objects.get_for_model(self._meta.model) custom_fields = CustomField.objects.filter(content_types=content_type) extra_columns.extend([ - # (f'cf_{cf.name}', columns.CustomFieldMarkdownColumn(cf) if cf.type == CustomFieldTypeChoices.TYPE_LONGTEXT else columns.CustomFieldColumn(cf)) for cf in custom_fields (f'cf_{cf.name}', columns.CustomFieldColumn(cf)) for cf in custom_fields ]) custom_links = CustomLink.objects.filter(content_type=content_type, enabled=True) From ac540b6183bd5bf8db57b1941de24aafc7b04f3c Mon Sep 17 00:00:00 2001 From: Christoph Schneider Date: Sat, 13 Aug 2022 13:59:19 +0200 Subject: [PATCH 4/6] remove import --- netbox/netbox/tables/tables.py | 1 - 1 file changed, 1 deletion(-) diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index 63aae1d19..8c5fb039c 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -7,7 +7,6 @@ from django.db.models.fields.related import RelatedField from django_tables2.data import TableQuerysetData from extras.models import CustomField, CustomLink -from extras.choices import CustomFieldTypeChoices from netbox.tables import columns from utilities.paginator import EnhancedPaginator, get_paginate_count From 36491b13d86b26a0e75d84b8b5db64403f3fbe89 Mon Sep 17 00:00:00 2001 From: Christoph Schneider Date: Sat, 13 Aug 2022 14:01:07 +0200 Subject: [PATCH 5/6] remove class definition --- netbox/netbox/tables/columns.py | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index 8b961219f..4918dd3b9 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -559,29 +559,4 @@ class MarkdownColumn(tables.TemplateColumn): ) def value(self, value): - return value - - -class CustomFieldMarkdownColumn(tables.TemplateColumn): - """ - Render a Markdown string in a longtext custom column. - """ - template_code = """ - {% if value %} - {{ value|markdown }} - {% else %} - — - {% endif %} - """ - - def __init__(self, customfield, *args, **kwargs): - self.customfield = customfield - kwargs['accessor'] = Accessor(f'custom_field_data__{customfield.name}') - kwargs['template_code'] = self.template_code - if 'verbose_name' not in kwargs: - kwargs['verbose_name'] = customfield.label or customfield.name - - super().__init__(*args, **kwargs) - - def value(self, value): - return value + return value \ No newline at end of file From 15f4b1fd5daa5c8dd4338352d37049b47e4bf7de Mon Sep 17 00:00:00 2001 From: Christoph Schneider Date: Sat, 13 Aug 2022 14:02:26 +0200 Subject: [PATCH 6/6] add newline --- netbox/netbox/tables/columns.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index 4918dd3b9..113c8416b 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -559,4 +559,4 @@ class MarkdownColumn(tables.TemplateColumn): ) def value(self, value): - return value \ No newline at end of file + return value