Просмотр исходного кода

Closes #2490: Added bulk editing for config contexts

Jeremy Stretch 7 лет назад
Родитель
Сommit
83be0b5db4
5 измененных файлов с 44 добавлено и 5 удалено
  1. 4 0
      CHANGELOG.md
  2. 24 2
      netbox/extras/forms.py
  3. 1 0
      netbox/extras/urls.py
  4. 14 2
      netbox/extras/views.py
  5. 1 1
      netbox/templates/extras/configcontext_list.html

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 v2.4.8 (FUTURE)
 v2.4.8 (FUTURE)
 
 
+## Enhancements
+
+* [#2490](https://github.com/digitalocean/netbox/issues/2490) - Added bulk editing for config contexts
+
 ## Bug Fixes
 ## Bug Fixes
 
 
 * [#2473](https://github.com/digitalocean/netbox/issues/2473) - Fix encoding of long (>127 character) secrets
 * [#2473](https://github.com/digitalocean/netbox/issues/2473) - Fix encoding of long (>127 character) secrets

+ 24 - 2
netbox/extras/forms.py

@@ -13,8 +13,8 @@ from taggit.models import Tag
 from dcim.models import DeviceRole, Platform, Region, Site
 from dcim.models import DeviceRole, Platform, Region, Site
 from tenancy.models import Tenant, TenantGroup
 from tenancy.models import Tenant, TenantGroup
 from utilities.forms import (
 from utilities.forms import (
-    add_blank_choice, BootstrapMixin, BulkEditForm, FilterChoiceField, FilterTreeNodeMultipleChoiceField, LaxURLField,
-    JSONField, SlugField,
+    add_blank_choice, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, FilterChoiceField,
+    FilterTreeNodeMultipleChoiceField, LaxURLField, JSONField, SlugField,
 )
 )
 from .constants import (
 from .constants import (
     CF_FILTER_DISABLED, CF_TYPE_BOOLEAN, CF_TYPE_DATE, CF_TYPE_INTEGER, CF_TYPE_SELECT, CF_TYPE_URL,
     CF_FILTER_DISABLED, CF_TYPE_BOOLEAN, CF_TYPE_DATE, CF_TYPE_INTEGER, CF_TYPE_SELECT, CF_TYPE_URL,
@@ -227,6 +227,28 @@ class ConfigContextForm(BootstrapMixin, forms.ModelForm):
         ]
         ]
 
 
 
 
+class ConfigContextBulkEditForm(BootstrapMixin, BulkEditForm):
+    pk = forms.ModelMultipleChoiceField(
+        queryset=ConfigContext.objects.all(),
+        widget=forms.MultipleHiddenInput
+    )
+    weight = forms.IntegerField(
+        required=False,
+        min_value=0
+    )
+    is_active = forms.NullBooleanField(
+        required=False,
+        widget=BulkEditNullBooleanSelect()
+    )
+    description = forms.CharField(
+        required=False,
+        max_length=100
+    )
+
+    class Meta:
+        nullable_fields = ['description']
+
+
 class ConfigContextFilterForm(BootstrapMixin, forms.Form):
 class ConfigContextFilterForm(BootstrapMixin, forms.Form):
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,

+ 1 - 0
netbox/extras/urls.py

@@ -16,6 +16,7 @@ urlpatterns = [
     # Config contexts
     # Config contexts
     url(r'^config-contexts/$', views.ConfigContextListView.as_view(), name='configcontext_list'),
     url(r'^config-contexts/$', views.ConfigContextListView.as_view(), name='configcontext_list'),
     url(r'^config-contexts/add/$', views.ConfigContextCreateView.as_view(), name='configcontext_add'),
     url(r'^config-contexts/add/$', views.ConfigContextCreateView.as_view(), name='configcontext_add'),
+    url(r'^config-contexts/edit/$', views.ConfigContextBulkEditView.as_view(), name='configcontext_bulk_edit'),
     url(r'^config-contexts/(?P<pk>\d+)/$', views.ConfigContextView.as_view(), name='configcontext'),
     url(r'^config-contexts/(?P<pk>\d+)/$', views.ConfigContextView.as_view(), name='configcontext'),
     url(r'^config-contexts/(?P<pk>\d+)/edit/$', views.ConfigContextEditView.as_view(), name='configcontext_edit'),
     url(r'^config-contexts/(?P<pk>\d+)/edit/$', views.ConfigContextEditView.as_view(), name='configcontext_edit'),
     url(r'^config-contexts/(?P<pk>\d+)/delete/$', views.ConfigContextDeleteView.as_view(), name='configcontext_delete'),
     url(r'^config-contexts/(?P<pk>\d+)/delete/$', views.ConfigContextDeleteView.as_view(), name='configcontext_delete'),

+ 14 - 2
netbox/extras/views.py

@@ -12,9 +12,12 @@ from django.views.generic import View
 from taggit.models import Tag
 from taggit.models import Tag
 
 
 from utilities.forms import ConfirmationForm
 from utilities.forms import ConfirmationForm
-from utilities.views import BulkDeleteView, ObjectDeleteView, ObjectEditView, ObjectListView
+from utilities.views import BulkDeleteView, BulkEditView, ObjectDeleteView, ObjectEditView, ObjectListView
 from . import filters
 from . import filters
-from .forms import ConfigContextForm, ConfigContextFilterForm, ImageAttachmentForm, ObjectChangeFilterForm, TagForm
+from .forms import (
+    ConfigContextForm, ConfigContextBulkEditForm, ConfigContextFilterForm, ImageAttachmentForm, ObjectChangeFilterForm,
+    TagForm,
+)
 from .models import ConfigContext, ImageAttachment, ObjectChange, ReportResult
 from .models import ConfigContext, ImageAttachment, ObjectChange, ReportResult
 from .reports import get_report, get_reports
 from .reports import get_report, get_reports
 from .tables import ConfigContextTable, ObjectChangeTable, TagTable
 from .tables import ConfigContextTable, ObjectChangeTable, TagTable
@@ -85,6 +88,15 @@ class ConfigContextEditView(ConfigContextCreateView):
     permission_required = 'extras.change_configcontext'
     permission_required = 'extras.change_configcontext'
 
 
 
 
+class ConfigContextBulkEditView(PermissionRequiredMixin, BulkEditView):
+    permission_required = 'extras.change_configcontext'
+    queryset = ConfigContext.objects.all()
+    filter = filters.ConfigContextFilter
+    table = ConfigContextTable
+    form = ConfigContextBulkEditForm
+    default_return_url = 'extras:configcontext_list'
+
+
 class ConfigContextDeleteView(PermissionRequiredMixin, ObjectDeleteView):
 class ConfigContextDeleteView(PermissionRequiredMixin, ObjectDeleteView):
     permission_required = 'extras.delete_configcontext'
     permission_required = 'extras.delete_configcontext'
     model = ConfigContext
     model = ConfigContext

+ 1 - 1
netbox/templates/extras/configcontext_list.html

@@ -10,7 +10,7 @@
     <h1>{% block title %}Config Contexts{% endblock %}</h1>
     <h1>{% block title %}Config Contexts{% endblock %}</h1>
     <div class="row">
     <div class="row">
         <div class="col-md-9">
         <div class="col-md-9">
-            {% include 'utilities/obj_table.html' with bulk_delete_url='extras:configcontext_bulk_delete' %}
+            {% include 'utilities/obj_table.html' with bulk_edit_url='extras:configcontext_bulk_edit' bulk_delete_url='extras:configcontext_bulk_delete' %}
         </div>
         </div>
         <div class="col-md-3">
         <div class="col-md-3">
             {% include 'inc/search_panel.html' %}
             {% include 'inc/search_panel.html' %}