diff --git a/netbox/project-static/js/tableconfig.js b/netbox/project-static/js/tableconfig.js new file mode 100644 index 000000000..ddea201a1 --- /dev/null +++ b/netbox/project-static/js/tableconfig.js @@ -0,0 +1,25 @@ +$(document).ready(function() { + $('form.tableconfigform').submit(function(event) { + event.preventDefault(); + let table_name = this.getAttribute('data-table-name'); + let data = {"tables": {}}; + data['tables'][table_name] = {}; + data['tables'][table_name]['columns'] = $('#id_columns').val(); + $.ajax({ + url: netbox_api_path + 'users/config/', + async: true, + contentType: 'application/json', + dataType: 'json', + type: 'PATCH', + beforeSend: function(xhr, settings) { + xhr.setRequestHeader("X-CSRFToken", netbox_csrf_token); + }, + data: JSON.stringify(data), + }).done(function () { + // Reload the page + window.location.reload(true); + }).fail(function (xhr, status, error) { + alert("Failed: " + error); + }); + }); +}); diff --git a/netbox/templates/base.html b/netbox/templates/base.html index 20042d151..b355d8d01 100644 --- a/netbox/templates/base.html +++ b/netbox/templates/base.html @@ -96,6 +96,7 @@ onerror="window.location='{% url 'media_failure' %}?filename=js/forms.js'"> +{% endblock %} diff --git a/netbox/utilities/forms/forms.py b/netbox/utilities/forms/forms.py index bc68f29f6..47be72eea 100644 --- a/netbox/utilities/forms/forms.py +++ b/netbox/utilities/forms/forms.py @@ -168,8 +168,14 @@ class TableConfigForm(BootstrapMixin, forms.Form): ) def __init__(self, table, *args, **kwargs): + self.table = table + super().__init__(*args, **kwargs) # Initialize columns field based on table attributes self.fields['columns'].choices = table.configurable_columns self.fields['columns'].initial = table.visible_columns + + @property + def table_name(self): + return self.table.__class__.__name__ diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index f527aeeba..e7e7412bf 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -317,23 +317,6 @@ class ObjectListView(ObjectPermissionRequiredMixin, View): return render(request, self.template_name, context) - @method_decorator(login_required) - def post(self, request): - - # Update the user's table configuration - table = self.table(self.queryset) - form = TableConfigForm(table=table, data=request.POST) - preference_name = f"tables.{self.table.__name__}.columns" - - if form.is_valid(): - if 'set' in request.POST: - request.user.config.set(preference_name, form.cleaned_data['columns'], commit=True) - elif 'clear' in request.POST: - request.user.config.clear(preference_name, commit=True) - messages.success(request, "Your preferences have been updated.") - - return redirect(request.get_full_path()) - def extra_context(self): return {}