diff --git a/bookwyrm/templates/settings/users/user_admin.html b/bookwyrm/templates/settings/users/user_admin.html
index 5b2fbd15f..9bc5805b1 100644
--- a/bookwyrm/templates/settings/users/user_admin.html
+++ b/bookwyrm/templates/settings/users/user_admin.html
@@ -24,6 +24,10 @@
{% trans "Local users" %}
+ {% url 'settings-users' status="deleted" as url %}
+
+ {% trans "Deleted users" %}
+
{% url 'settings-users' status="federated" as url %}
{% trans "Federated community" %}
@@ -52,7 +56,7 @@
{% trans "Status" as text %}
{% include 'snippets/table-sort-header.html' with field="is_active" sort=sort text=text %}
- {% if status != "local" %}
+ {% if status == "federated" %}
{% trans "Remote instance" as text %}
{% include 'snippets/table-sort-header.html' with field="federated_server__server_name" sort=sort text=text %}
@@ -89,7 +93,7 @@
({{ user.get_deactivation_reason_display }})
{% endif %}
- {% if status != "local" %}
+ {% if status == "federated" %}
|
{% if user.federated_server %}
{{ user.federated_server.server_name }}
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py
index 248bb6db8..cbb468d5a 100644
--- a/bookwyrm/urls.py
+++ b/bookwyrm/urls.py
@@ -126,7 +126,7 @@ urlpatterns = [
r"^settings/users/?$", views.UserAdminList.as_view(), name="settings-users"
),
re_path(
- r"^settings/users/(?P(local|federated))\/?$",
+ r"^settings/users/(?P(local|federated|deleted))\/?$",
views.UserAdminList.as_view(),
name="settings-users",
),
diff --git a/bookwyrm/views/admin/user_admin.py b/bookwyrm/views/admin/user_admin.py
index aba665d2f..6ec6f93d2 100644
--- a/bookwyrm/views/admin/user_admin.py
+++ b/bookwyrm/views/admin/user_admin.py
@@ -22,21 +22,25 @@ class UserAdminList(View):
def get(self, request, status="local"):
"""list of users"""
filters = {}
+ exclusions = {}
if server := request.GET.get("server"):
server = models.FederatedServer.objects.filter(server_name=server).first()
filters["federated_server"] = server
filters["federated_server__isnull"] = False
+
if username := request.GET.get("username"):
filters["username__icontains"] = username
- scope = request.GET.get("scope")
- if scope and scope == "local":
- filters["local"] = True
+
if email := request.GET.get("email"):
filters["email__endswith"] = email
- filters["local"] = status == "local"
+ filters["local"] = status in ["local", "deleted"]
+ if status == "deleted":
+ filters["deactivation_reason__icontains"] = "deletion"
+ else:
+ exclusions["deactivation_reason__icontains"] = "deletion"
- users = models.User.objects.filter(**filters)
+ users = models.User.objects.filter(**filters).exclude(**exclusions)
sort = request.GET.get("sort", "-created_date")
sort_fields = [
|