From 619809204746c66b1fe344e6c3cc9708d38842a0 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 12 Aug 2025 16:38:01 -0400 Subject: [PATCH] #18990: Add bulk edit & bulk delete support for image attachments --- netbox/extras/forms/bulk_edit.py | 13 +++++++++++++ netbox/extras/views.py | 21 ++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/netbox/extras/forms/bulk_edit.py b/netbox/extras/forms/bulk_edit.py index 82f3d04c4..c0a210e42 100644 --- a/netbox/extras/forms/bulk_edit.py +++ b/netbox/extras/forms/bulk_edit.py @@ -20,6 +20,7 @@ __all__ = ( 'CustomLinkBulkEditForm', 'EventRuleBulkEditForm', 'ExportTemplateBulkEditForm', + 'ImageAttachmentBulkEditForm', 'JournalEntryBulkEditForm', 'NotificationGroupBulkEditForm', 'SavedFilterBulkEditForm', @@ -401,6 +402,18 @@ class ConfigTemplateBulkEditForm(ChangelogMessageMixin, BulkEditForm): nullable_fields = ('description', 'mime_type', 'file_name', 'file_extension') +class ImageAttachmentBulkEditForm(ChangelogMessageMixin, BulkEditForm): + pk = forms.ModelMultipleChoiceField( + queryset=ImageAttachment.objects.all(), + widget=forms.MultipleHiddenInput + ) + description = forms.CharField( + label=_('Description'), + max_length=200, + required=False + ) + + class JournalEntryBulkEditForm(ChangelogMessageMixin, BulkEditForm): pk = forms.ModelMultipleChoiceField( queryset=JournalEntry.objects.all(), diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 169bd845b..c76afbd15 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -1098,7 +1098,7 @@ class ImageAttachmentListView(generic.ObjectListView): filterset = filtersets.ImageAttachmentFilterSet filterset_form = forms.ImageAttachmentFilterForm table = tables.ImageAttachmentTable - actions = (BulkRename, BulkExport) + actions = (BulkExport, BulkEdit, BulkRename, BulkDelete) @register_model_view(ImageAttachment) @@ -1126,14 +1126,29 @@ class ImageAttachmentEditView(generic.ObjectEditView): } +@register_model_view(ImageAttachment, 'delete') +class ImageAttachmentDeleteView(generic.ObjectDeleteView): + queryset = ImageAttachment.objects.all() + + +@register_model_view(ImageAttachment, 'bulk_edit', path='edit', detail=False) +class ImageAttachmentBulkEditView(generic.BulkEditView): + queryset = ImageAttachment.objects.all() + filterset = filtersets.ImageAttachmentFilterSet + table = tables.ImageAttachmentTable + form = forms.ImageAttachmentBulkEditForm + + @register_model_view(ImageAttachment, 'bulk_rename', path='rename', detail=False) class ImageAttachmentBulkRenameView(generic.BulkRenameView): queryset = ImageAttachment.objects.all() -@register_model_view(ImageAttachment, 'delete') -class ImageAttachmentDeleteView(generic.ObjectDeleteView): +@register_model_view(ImageAttachment, 'bulk_delete', path='delete', detail=False) +class ImageAttachmentBulkDeleteView(generic.BulkDeleteView): queryset = ImageAttachment.objects.all() + filterset = filtersets.ImageAttachmentFilterSet + table = tables.ImageAttachmentTable #