From bbecf18704837f087e8254b657adf1c5e859dff9 Mon Sep 17 00:00:00 2001
From: scragly <29337040+scragly@users.noreply.github.com>
Date: Fri, 18 Sep 2020 12:47:32 +1000
Subject: Update Role ModelAdmin to past changes, cleanup formatting.
---
 pydis_site/apps/api/admin.py           | 45 ++++++++++++++++++++++------------
 pydis_site/apps/api/models/bot/role.py |  3 ++-
 2 files changed, 31 insertions(+), 17 deletions(-)
(limited to 'pydis_site/apps')
diff --git a/pydis_site/apps/api/admin.py b/pydis_site/apps/api/admin.py
index 15a1ec78..d32b4911 100644
--- a/pydis_site/apps/api/admin.py
+++ b/pydis_site/apps/api/admin.py
@@ -222,34 +222,47 @@ class OffTopicChannelNameAdmin(admin.ModelAdmin):
 class RoleAdmin(admin.ModelAdmin):
     """Admin formatting for the Role model."""
 
-    exclude = ("permissions", "colour")
-    readonly_fields = (
-        "name",
-        "id",
-        "colour_with_preview",
-        "permissions_with_calc_link",
-        "position"
-    )
-    search_fields = ("name", "id")
+    def coloured_name(self, role: Role) -> SafeString:
+        """Role name with html style colouring."""
+        return format_html(
+            '{1}',
+            f"#{role.colour:06X}",
+            role.name
+        )
+
+    coloured_name.short_description = "Name"
 
-    def colour_with_preview(self, instance: Role) -> str:
+    def colour_with_preview(self, role: Role) -> SafeString:
         """Show colour value in both int and hex, in bolded and coloured style."""
         return format_html(
-            "{1} / #{0}",
-            f"{instance.colour:06x}",
-            instance.colour
+            "{0} ({1})",
+            f"#{role.colour:06x}",
+            role.colour
         )
 
-    def permissions_with_calc_link(self, instance: Role) -> str:
+    colour_with_preview.short_description = "Colour"
+
+    def permissions_with_calc_link(self, role: Role) -> SafeString:
         """Show permissions with link to API permissions calculator page."""
         return format_html(
             "{0}",
-            instance.permissions
+            role.permissions
         )
 
-    colour_with_preview.short_description = "Colour"
     permissions_with_calc_link.short_description = "Permissions"
 
+    search_fields = ("name", "id")
+    list_display = ("coloured_name",)
+    fields = ("id", "name", "colour_with_preview", "permissions_with_calc_link", "position")
+
+    def has_add_permission(self, *args) -> bool:
+        """Prevent adding from django admin."""
+        return False
+
+    def has_change_permission(self, *args) -> bool:
+        """Prevent editing from django admin."""
+        return False
+
 
 class UserTopRoleFilter(admin.SimpleListFilter):
     """List Filter for User list Admin page."""
diff --git a/pydis_site/apps/api/models/bot/role.py b/pydis_site/apps/api/models/bot/role.py
index b23fc5f4..cfadfec4 100644
--- a/pydis_site/apps/api/models/bot/role.py
+++ b/pydis_site/apps/api/models/bot/role.py
@@ -22,7 +22,8 @@ class Role(ModelReprMixin, models.Model):
                 message="Role IDs cannot be negative."
             ),
         ),
-        help_text="The role ID, taken from Discord."
+        help_text="The role ID, taken from Discord.",
+        verbose_name="ID"
     )
     name = models.CharField(
         max_length=100,
-- 
cgit v1.2.3