From 2fa87131cb301b0962770a981b6a0a9aa6969708 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 20 Mar 2023 15:04:56 -0700 Subject: [PATCH] 11933 saved filters clone of content-types and add m2m field cloning --- netbox/extras/models/models.py | 2 +- netbox/netbox/models/features.py | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index e608f81b1..fb443e799 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -406,7 +406,7 @@ class SavedFilter(CloningMixin, ExportTemplatesMixin, WebhooksMixin, ChangeLogge parameters = models.JSONField() clone_fields = ( - 'enabled', 'weight', + 'content_types', 'weight', 'enabled', 'parameters', ) class Meta: diff --git a/netbox/netbox/models/features.py b/netbox/netbox/models/features.py index 62482a26f..317ecc6eb 100644 --- a/netbox/netbox/models/features.py +++ b/netbox/netbox/models/features.py @@ -110,9 +110,14 @@ class CloningMixin(models.Model): for field_name in getattr(self, 'clone_fields', []): field = self._meta.get_field(field_name) - field_value = field.value_from_object(self) - if field_value not in (None, ''): - attrs[field_name] = field_value + if isinstance(field, models.ManyToManyField): + m2m = getattr(self, field.name) + if m2m: + attrs[field_name] = [f.pk for f in m2m.all()] + else: + field_value = field.value_from_object(self) + if field_value not in (None, ''): + attrs[field_name] = field_value # Include tags (if applicable) if is_taggable(self):