Skip to content

Commit 654e32c

Browse files
11933 saved filters clone of content-types and add m2m field cloning (#12014)
* 11933 saved filters clone of content-types and add m2m field cloning * Fix JSON rendering * Add content_types to CustomLink.clone() --------- Co-authored-by: jeremystretch <[email protected]>
1 parent 879aabe commit 654e32c

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

netbox/extras/forms/model_forms.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import json
2+
13
from django import forms
24
from django.contrib.contenttypes.models import ContentType
3-
from django.http import QueryDict
45
from django.utils.translation import gettext as _
56

67
from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup
@@ -128,11 +129,10 @@ class Meta:
128129

129130
def __init__(self, *args, initial=None, **kwargs):
130131

131-
# Convert any parameters delivered via initial data to a dictionary
132+
# Convert any parameters delivered via initial data to JSON data
132133
if initial and 'parameters' in initial:
133134
if type(initial['parameters']) is str:
134-
# TODO: Make a utility function for this
135-
initial['parameters'] = dict(QueryDict(initial['parameters']).lists())
135+
initial['parameters'] = json.loads(initial['parameters'])
136136

137137
super().__init__(*args, initial=initial, **kwargs)
138138

netbox/extras/models/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ class CustomLink(CloningMixin, ExportTemplatesMixin, WebhooksMixin, ChangeLogged
245245
)
246246

247247
clone_fields = (
248-
'enabled', 'weight', 'group_name', 'button_class', 'new_window',
248+
'content_types', 'enabled', 'weight', 'group_name', 'button_class', 'new_window',
249249
)
250250

251251
class Meta:
@@ -410,7 +410,7 @@ class SavedFilter(CloningMixin, ExportTemplatesMixin, WebhooksMixin, ChangeLogge
410410
parameters = models.JSONField()
411411

412412
clone_fields = (
413-
'enabled', 'weight',
413+
'content_types', 'weight', 'enabled', 'parameters',
414414
)
415415

416416
class Meta:

netbox/netbox/models/features.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
from collections import defaultdict
23
from functools import cached_property
34

@@ -111,7 +112,11 @@ def clone(self):
111112
for field_name in getattr(self, 'clone_fields', []):
112113
field = self._meta.get_field(field_name)
113114
field_value = field.value_from_object(self)
114-
if field_value not in (None, ''):
115+
if field_value and isinstance(field, models.ManyToManyField):
116+
attrs[field_name] = [v.pk for v in field_value]
117+
elif field_value and isinstance(field, models.JSONField):
118+
attrs[field_name] = json.dumps(field_value)
119+
elif field_value not in (None, ''):
115120
attrs[field_name] = field_value
116121

117122
# Include tags (if applicable)

0 commit comments

Comments
 (0)