diff --git a/api/funkwhale_api/manage/serializers.py b/api/funkwhale_api/manage/serializers.py
index add9364e86a3fc9e7f82873fbbea15949a59fde4..a9b19939d822f3d07053aaa7a28f8d6f20b57f50 100644
--- a/api/funkwhale_api/manage/serializers.py
+++ b/api/funkwhale_api/manage/serializers.py
@@ -44,12 +44,14 @@ class ManageUserSimpleSerializer(serializers.ModelSerializer):
 class ManageUserSerializer(serializers.ModelSerializer):
     permissions = PermissionsSerializer(source="*")
     upload_quota = serializers.IntegerField(allow_null=True)
+    actor = serializers.SerializerMethodField()
 
     class Meta:
         model = users_models.User
         fields = (
             "id",
             "username",
+            "actor",
             "email",
             "name",
             "is_active",
@@ -82,6 +84,10 @@ class ManageUserSerializer(serializers.ModelSerializer):
             )
         return instance
 
+    def get_actor(self, obj):
+        if obj.actor:
+            return ManageBaseActorSerializer(obj.actor).data
+
 
 class ManageInvitationSerializer(serializers.ModelSerializer):
     users = ManageUserSimpleSerializer(many=True, required=False)
diff --git a/api/funkwhale_api/manage/views.py b/api/funkwhale_api/manage/views.py
index 83981116c59c69f9b350ab23e1182ee930e07464..6e4edc888b858698236fd2b98e85724996572baa 100644
--- a/api/funkwhale_api/manage/views.py
+++ b/api/funkwhale_api/manage/views.py
@@ -291,7 +291,7 @@ class ManageUserViewSet(
     mixins.UpdateModelMixin,
     viewsets.GenericViewSet,
 ):
-    queryset = users_models.User.objects.all().order_by("-id")
+    queryset = users_models.User.objects.all().select_related("actor").order_by("-id")
     serializer_class = serializers.ManageUserSerializer
     filterset_class = filters.ManageUserFilterSet
     required_scope = "instance:users"
diff --git a/changes/changelog.d/869.bugfix b/changes/changelog.d/869.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..7d56f3175a19da41b146b8f68fd18fe61b147652
--- /dev/null
+++ b/changes/changelog.d/869.bugfix
@@ -0,0 +1 @@
+Fixed broken user admin for users with non-digit or letters in their username (#869)
diff --git a/front/src/components/manage/users/UsersTable.vue b/front/src/components/manage/users/UsersTable.vue
index ee1d3110b2c800e7f1445718ff26f484af82b23e..a508f5be9469050d834d5f15a897dabf63b3d6c2 100644
--- a/front/src/components/manage/users/UsersTable.vue
+++ b/front/src/components/manage/users/UsersTable.vue
@@ -45,7 +45,8 @@
         </template>
         <template slot="row-cells" slot-scope="scope">
           <td>
-            <router-link :to="{name: 'manage.moderation.accounts.detail', params: {id: scope.obj.full_username }}">{{ scope.obj.username }}</router-link>
+            <router-link v-if="scope.obj.actor" :to="{name: 'manage.moderation.accounts.detail', params: {id: scope.obj.actor.full_username }}">{{ scope.obj.username }}</router-link>
+            <router-link v-else :to="{name: 'manage.moderation.accounts.detail', params: {id: scope.obj.full_username }}">{{ scope.obj.username }}</router-link>
           </td>
           <td>
             <span>{{ scope.obj.email }}</span>