aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar scragly <[email protected]>2020-09-18 13:40:32 +1000
committerGravatar scragly <[email protected]>2020-09-18 13:40:32 +1000
commitf4c47c976f72033f133bc90fcc8f30f291f3ad59 (patch)
treeba5c985f780c815bea9d4123132b663af1b6c8bd
parentAdd Used filter for OffTopicChannelName Admin model. (diff)
Update Nomination Admin model, add actor filter.
-rw-r--r--pydis_site/apps/api/admin.py47
1 files changed, 37 insertions, 10 deletions
diff --git a/pydis_site/apps/api/admin.py b/pydis_site/apps/api/admin.py
index d07fc335..a85b4cac 100644
--- a/pydis_site/apps/api/admin.py
+++ b/pydis_site/apps/api/admin.py
@@ -173,18 +173,47 @@ class InfractionAdmin(admin.ModelAdmin):
)
+class NominationActorFilter(admin.SimpleListFilter):
+ """Actor Filter for Nomination Admin list page."""
+
+ title = "Actor"
+ parameter_name = "actor"
+
+ def lookups(self, request: HttpRequest, model_admin: NominationAdmin) -> Iterable[Tuple[int, str]]:
+ """Selectable values for viewer to filter by."""
+ actor_ids = Nomination.objects.order_by().values_list("actor").distinct()
+ actors = User.objects.filter(id__in=actor_ids)
+ return ((a.id, a.username) for a in actors)
+
+ def queryset(self, request: HttpRequest, queryset: QuerySet) -> Optional[QuerySet]:
+ """Query to filter the list of Users against."""
+ if not self.value():
+ return
+ return queryset.filter(actor__id=self.value())
+
+
@admin.register(Nomination)
class NominationAdmin(admin.ModelAdmin):
"""Admin formatting for the Nomination model."""
+ search_fields = (
+ "user__name",
+ "user__id",
+ "actor__name",
+ "actor__id",
+ "reason",
+ "end_reason"
+ )
+
+ list_filter = ("active", NominationActorFilter)
+
list_display = (
"user",
"active",
"reason",
"actor",
- "inserted_at",
- "ended_at"
)
+
fields = (
"user",
"active",
@@ -194,6 +223,8 @@ class NominationAdmin(admin.ModelAdmin):
"ended_at",
"end_reason"
)
+
+ # only allow reason fields to be edited.
readonly_fields = (
"user",
"active",
@@ -201,14 +232,10 @@ class NominationAdmin(admin.ModelAdmin):
"inserted_at",
"ended_at"
)
- search_fields = (
- "actor__name",
- "actor__id",
- "user__name",
- "user__id",
- "reason"
- )
- list_filter = ("active",)
+
+ def has_add_permission(self, *args) -> bool:
+ """Prevent adding from django admin."""
+ return False
@admin.register(OffTopicChannelName)