aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site/apps/api/admin.py')
-rw-r--r--pydis_site/apps/api/admin.py108
1 files changed, 67 insertions, 41 deletions
diff --git a/pydis_site/apps/api/admin.py b/pydis_site/apps/api/admin.py
index 5093e605..449e660e 100644
--- a/pydis_site/apps/api/admin.py
+++ b/pydis_site/apps/api/admin.py
@@ -14,7 +14,6 @@ from .models import (
DeletedMessage,
DocumentationLink,
Infraction,
- LogEntry,
MessageDeletionContext,
Nomination,
OffTopicChannelName,
@@ -22,6 +21,7 @@ from .models import (
Role,
User
)
+from .models.bot.nomination import NominationEntry
admin.site.site_header = "Python Discord | Administration"
admin.site.site_title = "Python Discord"
@@ -120,33 +120,6 @@ class InfractionAdmin(admin.ModelAdmin):
return False
-class LogEntryAdmin(admin.ModelAdmin):
- """Allows viewing logs in the Django Admin without allowing edits."""
-
- actions = None
- list_display = ('timestamp', 'level', 'message')
- fieldsets = (
- ('Overview', {'fields': ('timestamp', 'application', 'logger_name')}),
- ('Metadata', {'fields': ('level', 'module', 'line')}),
- ('Contents', {'fields': ('message',)})
- )
- list_filter = ('level', 'timestamp')
- search_fields = ('message',)
-
- def has_add_permission(self, request: HttpRequest) -> bool:
- """Deny manual LogEntry creation."""
- return False
-
- def has_change_permission(self, *args) -> bool:
- """Prevent editing from django admin."""
- return False
-
- def has_delete_permission(self, request: HttpRequest, obj: Optional[LogEntry] = None) -> bool:
- """Deny LogEntry deletion."""
- return False
-
-
@admin.register(DeletedMessage)
class DeletedMessageAdmin(admin.ModelAdmin):
"""Admin formatting for the DeletedMessage model."""
@@ -246,7 +219,7 @@ class NominationActorFilter(admin.SimpleListFilter):
def lookups(self, request: HttpRequest, model: NominationAdmin) -> Iterable[Tuple[int, str]]:
"""Selectable values for viewer to filter by."""
- actor_ids = Nomination.objects.order_by().values_list("actor").distinct()
+ actor_ids = NominationEntry.objects.order_by().values_list("actor").distinct()
actors = User.objects.filter(id__in=actor_ids)
return ((a.id, a.username) for a in actors)
@@ -254,7 +227,10 @@ class NominationActorFilter(admin.SimpleListFilter):
"""Query to filter the list of Users against."""
if not self.value():
return
- return queryset.filter(actor__id=self.value())
+ nomination_ids = NominationEntry.objects.filter(
+ actor__id=self.value()
+ ).values_list("nomination_id").distinct()
+ return queryset.filter(id__in=nomination_ids)
@admin.register(Nomination)
@@ -264,9 +240,6 @@ class NominationAdmin(admin.ModelAdmin):
search_fields = (
"user__name",
"user__id",
- "actor__name",
- "actor__id",
- "reason",
"end_reason"
)
@@ -275,27 +248,25 @@ class NominationAdmin(admin.ModelAdmin):
list_display = (
"user",
"active",
- "reason",
- "actor",
+ "reviewed"
)
fields = (
"user",
"active",
- "actor",
- "reason",
"inserted_at",
"ended_at",
- "end_reason"
+ "end_reason",
+ "reviewed"
)
- # only allow reason fields to be edited.
+ # only allow end reason field to be edited.
readonly_fields = (
"user",
"active",
- "actor",
"inserted_at",
- "ended_at"
+ "ended_at",
+ "reviewed"
)
def has_add_permission(self, *args) -> bool:
@@ -303,6 +274,61 @@ class NominationAdmin(admin.ModelAdmin):
return False
+class NominationEntryActorFilter(admin.SimpleListFilter):
+ """Actor Filter for NominationEntry Admin list page."""
+
+ title = "Actor"
+ parameter_name = "actor"
+
+ def lookups(self, request: HttpRequest, model: NominationAdmin) -> Iterable[Tuple[int, str]]:
+ """Selectable values for viewer to filter by."""
+ actor_ids = NominationEntry.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())
+
+
[email protected](NominationEntry)
+class NominationEntryAdmin(admin.ModelAdmin):
+ """Admin formatting for the NominationEntry model."""
+
+ search_fields = (
+ "actor__name",
+ "actor__id",
+ "reason",
+ )
+
+ list_filter = (NominationEntryActorFilter,)
+
+ list_display = (
+ "nomination",
+ "actor",
+ )
+
+ fields = (
+ "nomination",
+ "actor",
+ "reason",
+ "inserted_at",
+ )
+
+ # only allow reason field to be edited
+ readonly_fields = (
+ "nomination",
+ "actor",
+ "inserted_at",
+ )
+
+ def has_add_permission(self, request: HttpRequest) -> bool:
+ """Disable adding new nomination entry from admin."""
+ return False
+
+
@admin.register(OffTopicChannelName)
class OffTopicChannelNameAdmin(admin.ModelAdmin):
"""Admin formatting for the OffTopicChannelName model."""