diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 49ec9b24c..ac03960db 100644 Binary files a/netbox/project-static/dist/netbox.js and b/netbox/project-static/dist/netbox.js differ diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 4bcb9572c..00f9ea08a 100644 Binary files a/netbox/project-static/dist/netbox.js.map and b/netbox/project-static/dist/netbox.js.map differ diff --git a/netbox/project-static/src/buttons/reslug.ts b/netbox/project-static/src/buttons/reslug.ts index 53c21b1f0..14b0a09ec 100644 --- a/netbox/project-static/src/buttons/reslug.ts +++ b/netbox/project-static/src/buttons/reslug.ts @@ -20,11 +20,13 @@ function slugify(slug: string, chars: number): string { * For any slug fields, add event listeners to handle automatically generating slug values. */ export function initReslug(): void { - for (const slugButton of getElements('button#reslug')) { + for (const slugButton of getElements('button.reslug')) { const form = slugButton.form; if (form == null) continue; - const slugField = form.querySelector('#id_slug') as HTMLInputElement; + + const slugField = form.querySelector('input.slug-field') as HTMLInputElement; if (slugField == null) continue; + const sourceId = slugField.getAttribute('slug-source'); const sourceField = form.querySelector(`#id_${sourceId}`) as HTMLInputElement; diff --git a/netbox/utilities/forms/fields/fields.py b/netbox/utilities/forms/fields/fields.py index 41b7a1b4a..4e19e60a2 100644 --- a/netbox/utilities/forms/fields/fields.py +++ b/netbox/utilities/forms/fields/fields.py @@ -53,6 +53,14 @@ class SlugField(forms.SlugField): self.widget.attrs['slug-source'] = slug_source + def get_bound_field(self, form, field_name): + if prefix := form.prefix: + slug_source = self.widget.attrs.get('slug-source') + if slug_source and not slug_source.startswith(f'{prefix}-'): + self.widget.attrs['slug-source'] = f"{prefix}-{slug_source}" + + return super().get_bound_field(form, field_name) + class ColorField(forms.CharField): """ diff --git a/netbox/utilities/forms/widgets/misc.py b/netbox/utilities/forms/widgets/misc.py index 87abf81ba..ab34a6449 100644 --- a/netbox/utilities/forms/widgets/misc.py +++ b/netbox/utilities/forms/widgets/misc.py @@ -56,6 +56,14 @@ class SlugWidget(forms.TextInput): """ template_name = 'widgets/sluginput.html' + def __init__(self, attrs=None): + local_attrs = {} if attrs is None else attrs.copy() + if 'class' in local_attrs: + local_attrs['class'] = f"{local_attrs['class']} slug-field" + else: + local_attrs['class'] = 'slug-field' + super().__init__(local_attrs) + class ArrayWidget(forms.Textarea): """ diff --git a/netbox/utilities/templates/form_helpers/render_field.html b/netbox/utilities/templates/form_helpers/render_field.html index 0f9068b5a..74e3a34d5 100644 --- a/netbox/utilities/templates/form_helpers/render_field.html +++ b/netbox/utilities/templates/form_helpers/render_field.html @@ -19,7 +19,7 @@ {% if field|widget_type == 'slugwidget' %}
{{ field }} -