-
User Login
-
{{ request.user.username }}
-
-
Full Name
-
- {% if request.user.first_name and request.user.last_name %}
- {{ request.user.first_name }} {{ request.user.last_name }}
- {% elif request.user.first_name and not request.user.last_name %}
- {{ request.user.first_name }}
- {% else %}
- {{ request.user.last_name|placeholder }}
- {% endif %}
-
-
-
Email
-
{{ request.user.email|placeholder }}
-
-
Registered
-
{{ request.user.date_joined|annotated_date }}
-
-
Groups
-
- {% for group in request.user.groups.all %}
- {{ group }}
- {% empty %}
- None
- {% endfor %}
-
-
-
Admin Access
-
{{ request.user.is_staff|yesno|capfirst }}
+
+
+
+
+
+
+
+ Username |
+ {{ request.user.username }} |
+
+
+ Full Name |
+
+ {% if request.user.first_name or request.user.last_name %}
+ {{ request.user.first_name }} {{ request.user.last_name }}
+ {% else %}
+ —
+ {% endif %}
+ |
+
+
+ Email |
+ {{ request.user.email|placeholder }} |
+
+
+ Account Created |
+ {{ request.user.date_joined|annotated_date }} |
+
+
+ Superuser |
+
+ {% if request.user.is_superuser %}
+
+ {% else %}
+
+ {% endif %}
+ |
+
+
+ Admin Access |
+
+ {% if request.user.is_staff %}
+
+ {% else %}
+
+ {% endif %}
+ |
+
+
+
+
+
+
+
+
+
+ {% for group in request.user.groups.all %}
+ - {{ group }}
+ {% empty %}
+ - None
+ {% endfor %}
+
+
+ {% if perms.extras.view_objectchange %}
+
+
+
+
+
+ {% render_table changelog_table 'inc/table.html' %}
+
+
+
+
+ {% endif %}
{% endblock %}
diff --git a/netbox/users/views.py b/netbox/users/views.py
index 5acb593b4..ecf3295b5 100644
--- a/netbox/users/views.py
+++ b/netbox/users/views.py
@@ -15,6 +15,8 @@ from django.views.decorators.debug import sensitive_post_parameters
from django.views.generic import View
from social_core.backends.utils import load_backends
+from extras.models import ObjectChange
+from extras.tables import ObjectChangeTable
from netbox.config import get_config
from utilities.forms import ConfirmationForm
from .forms import LoginForm, PasswordChangeForm, TokenForm
@@ -119,7 +121,14 @@ class ProfileView(LoginRequiredMixin, View):
def get(self, request):
+ # Compile changelog table
+ changelog = ObjectChange.objects.restrict(request.user, 'view').filter(user=request.user).prefetch_related(
+ 'changed_object_type'
+ )[:20]
+ changelog_table = ObjectChangeTable(changelog)
+
return render(request, self.template_name, {
+ 'changelog_table': changelog_table,
'active_tab': 'profile',
})