From 956e2728c29b50c5f1fb42c49bbddca22644f36e Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 17 Mar 2021 10:41:06 -0400 Subject: [PATCH] Add bulk edit, delete views for journal entries --- netbox/extras/forms.py | 16 +++++++++++++++- netbox/extras/tables.py | 3 ++- netbox/extras/tests/test_views.py | 4 ++-- netbox/extras/urls.py | 2 ++ netbox/extras/views.py | 13 +++++++++++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/netbox/extras/forms.py b/netbox/extras/forms.py index a126378fa..3ab3a4c83 100644 --- a/netbox/extras/forms.py +++ b/netbox/extras/forms.py @@ -8,7 +8,7 @@ from dcim.models import DeviceRole, Platform, Region, Site, SiteGroup from tenancy.models import Tenant, TenantGroup from utilities.forms import ( add_blank_choice, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorSelect, - CSVModelForm, DateTimePicker, DynamicModelMultipleChoiceField, JSONField, SlugField, StaticSelect2, + CommentField, CSVModelForm, DateTimePicker, DynamicModelMultipleChoiceField, JSONField, SlugField, StaticSelect2, BOOLEAN_WITH_BLANK_CHOICES, ) from virtualization.models import Cluster, ClusterGroup @@ -386,6 +386,20 @@ class JournalEntryForm(BootstrapMixin, forms.ModelForm): } +class JournalEntryBulkEditForm(BootstrapMixin, BulkEditForm): + pk = forms.ModelMultipleChoiceField( + queryset=JournalEntry.objects.all(), + widget=forms.MultipleHiddenInput + ) + comments = forms.CharField( + required=False, + widget=forms.Textarea() + ) + + class Meta: + nullable_fields = [] + + class JournalEntryFilterForm(BootstrapMixin, forms.Form): model = JournalEntry q = forms.CharField( diff --git a/netbox/extras/tables.py b/netbox/extras/tables.py index 99a3a4d71..9146a19ad 100644 --- a/netbox/extras/tables.py +++ b/netbox/extras/tables.py @@ -99,6 +99,7 @@ class ObjectChangeTable(BaseTable): class JournalEntryTable(BaseTable): + pk = ToggleColumn() created = tables.DateTimeColumn( format=settings.SHORT_DATETIME_FORMAT ) @@ -117,7 +118,7 @@ class JournalEntryTable(BaseTable): class Meta(BaseTable.Meta): model = JournalEntry - fields = ('created', 'created_by', 'assigned_object_type', 'assigned_object', 'comments', 'actions') + fields = ('pk', 'created', 'created_by', 'assigned_object_type', 'assigned_object', 'comments', 'actions') class ObjectJournalTable(BaseTable): diff --git a/netbox/extras/tests/test_views.py b/netbox/extras/tests/test_views.py index 39f3f707f..d21b0c004 100644 --- a/netbox/extras/tests/test_views.py +++ b/netbox/extras/tests/test_views.py @@ -133,8 +133,8 @@ class JournalEntryTestCase( ViewTestCases.EditObjectViewTestCase, ViewTestCases.DeleteObjectViewTestCase, ViewTestCases.ListObjectsViewTestCase, - # ViewTestCases.BulkEditObjectsViewTestCase, - # ViewTestCases.BulkDeleteObjectsViewTestCase + ViewTestCases.BulkEditObjectsViewTestCase, + ViewTestCases.BulkDeleteObjectsViewTestCase ): model = JournalEntry diff --git a/netbox/extras/urls.py b/netbox/extras/urls.py index 6fbfd8bf1..ee435307d 100644 --- a/netbox/extras/urls.py +++ b/netbox/extras/urls.py @@ -34,6 +34,8 @@ urlpatterns = [ # Journal entries path('journal-entries/', views.JournalEntryListView.as_view(), name='journalentry_list'), path('journal-entries/add/', views.JournalEntryEditView.as_view(), name='journalentry_add'), + path('journal-entries/edit/', views.JournalEntryBulkEditView.as_view(), name='journalentry_bulk_edit'), + path('journal-entries/delete/', views.JournalEntryBulkDeleteView.as_view(), name='journalentry_bulk_delete'), path('journal-entries//edit/', views.JournalEntryEditView.as_view(), name='journalentry_edit'), path('journal-entries//delete/', views.JournalEntryDeleteView.as_view(), name='journalentry_delete'), diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 41ea7baa9..976c13760 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -320,6 +320,19 @@ class JournalEntryDeleteView(generic.ObjectDeleteView): return reverse(viewname, kwargs={'pk': obj.pk}) +class JournalEntryBulkEditView(generic.BulkEditView): + queryset = JournalEntry.objects.prefetch_related('created_by') + filterset = filters.JournalEntryFilterSet + table = tables.JournalEntryTable + form = forms.JournalEntryBulkEditForm + + +class JournalEntryBulkDeleteView(generic.BulkDeleteView): + queryset = JournalEntry.objects.prefetch_related('created_by') + filterset = filters.JournalEntryFilterSet + table = tables.JournalEntryTable + + class ObjectJournalView(View): """ Show all journal entries for an object.