feat: use django-objects-actions

This commit is contained in:
2026-09-16 19:07:40 +02:00
parent 4392122cfc
commit f68c4e50e8
7 changed files with 62 additions and 18 deletions
+15 -10
View File
@@ -1,6 +1,11 @@
from django.contrib import admin
from django.utils.html import format_html
from django.utils import timezone
from django_object_actions import (
DjangoObjectActions,
action,
takes_instance_or_queryset,
)
from opus_magnum.models import (
SteamAPIKey,
SteamCollection,
@@ -185,7 +190,7 @@ class PuzzleResponseInline(admin.TabularInline):
@admin.register(Submission)
class SubmissionAdmin(admin.ModelAdmin):
class SubmissionAdmin(DjangoObjectActions, admin.ModelAdmin):
list_display = [
"id",
"user",
@@ -238,9 +243,11 @@ class SubmissionAdmin(admin.ModelAdmin):
)
actions = ["mark_as_validated"]
change_actions = ["mark_as_validated"]
@action(label="Validate", description="Mark selected submissions as validated")
@takes_instance_or_queryset
def mark_as_validated(self, request, queryset):
"""Mark selected submissions as validated"""
updated = 0
for submission in queryset:
if not submission.is_validated:
@@ -254,11 +261,9 @@ class SubmissionAdmin(admin.ModelAdmin):
self.message_user(request, f"{updated} submissions marked as validated.")
mark_as_validated.short_description = "Mark selected submissions as validated"
@admin.register(PuzzleResponse)
class PuzzleResponseAdmin(admin.ModelAdmin):
class PuzzleResponseAdmin(DjangoObjectActions, admin.ModelAdmin):
list_display = [
"puzzle_name",
"submission",
@@ -314,22 +319,22 @@ class PuzzleResponseAdmin(admin.ModelAdmin):
)
actions = ["mark_for_validation", "clear_validation_flag"]
change_actions = ["mark_for_validation", "clear_validation_flag"]
@action(label="Mark for validation", description="Mark as needing validation")
@takes_instance_or_queryset
def mark_for_validation(self, request, queryset):
"""Mark selected responses as needing validation"""
updated = queryset.update(needs_manual_validation=True)
self.message_user(request, f"{updated} responses marked for validation.")
@action(label="Clear validation flag", description="Clear validation flag")
@takes_instance_or_queryset
def clear_validation_flag(self, request, queryset):
"""Clear validation flag for selected responses"""
updated = queryset.update(needs_manual_validation=False)
self.message_user(
request, f"{updated} responses cleared from validation queue."
)
mark_for_validation.short_description = "Mark as needing validation"
clear_validation_flag.short_description = "Clear validation flag"
@admin.register(SubmissionFile)
class SubmissionFileAdmin(admin.ModelAdmin):