diff options
author | 2020-09-18 13:40:32 +1000 | |
---|---|---|
committer | 2020-09-18 13:40:32 +1000 | |
commit | f4c47c976f72033f133bc90fcc8f30f291f3ad59 (patch) | |
tree | ba5c985f780c815bea9d4123132b663af1b6c8bd | |
parent | Add Used filter for OffTopicChannelName Admin model. (diff) |
Update Nomination Admin model, add actor filter.
-rw-r--r-- | pydis_site/apps/api/admin.py | 47 |
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) |