diff --git a/netbox/templates/users/_user.html b/netbox/templates/users/_user.html
index 441caf289..d03d44fa6 100644
--- a/netbox/templates/users/_user.html
+++ b/netbox/templates/users/_user.html
@@ -12,6 +12,9 @@
Profile
+
+ Preferences
+
{% if not request.user.ldap_username %}
Change Password
diff --git a/netbox/templates/users/preferences.html b/netbox/templates/users/preferences.html
index 65254645c..0884c7f17 100644
--- a/netbox/templates/users/preferences.html
+++ b/netbox/templates/users/preferences.html
@@ -4,15 +4,32 @@
{% block title %}User Preferences{% endblock %}
{% block usercontent %}
-
-
-
- Preference |
- Value |
-
-
-
- {% for %}
-
-
+ {% if preferences %}
+
+ {% else %}
+ No preferences found
+ {% endif %}
{% endblock %}
diff --git a/netbox/users/urls.py b/netbox/users/urls.py
index dae540726..b8b16cdf8 100644
--- a/netbox/users/urls.py
+++ b/netbox/users/urls.py
@@ -6,6 +6,7 @@ app_name = 'user'
urlpatterns = [
path('profile/', views.ProfileView.as_view(), name='profile'),
+ path('preferences/', views.UserConfigView.as_view(), name='preferences'),
path('password/', views.ChangePasswordView.as_view(), name='change_password'),
path('api-tokens/', views.TokenListView.as_view(), name='token_list'),
path('api-tokens/add/', views.TokenEditView.as_view(), name='token_add'),
diff --git a/netbox/users/views.py b/netbox/users/views.py
index ae1345b6b..c3e366542 100644
--- a/netbox/users/views.py
+++ b/netbox/users/views.py
@@ -111,6 +111,30 @@ class ProfileView(LoginRequiredMixin, View):
})
+class UserConfigView(LoginRequiredMixin, View):
+ template_name = 'users/preferences.html'
+
+ def get(self, request):
+
+ return render(request, self.template_name, {
+ 'preferences': request.user.config.all(),
+ 'active_tab': 'preferences',
+ })
+
+ def post(self, request):
+ userconfig = request.user.config
+ data = userconfig.all()
+
+ # Delete selected preferences
+ for key in request.POST.getlist('pk'):
+ if key in data:
+ userconfig.clear(key)
+ userconfig.save()
+ messages.success(request, "Your preferences have been updated.")
+
+ return redirect('user:preferences')
+
+
class ChangePasswordView(LoginRequiredMixin, View):
template_name = 'users/change_password.html'