Enhance migration process for rapids to shorts; skip normal rapids and provide user feedback on migration status

This commit is contained in:
Ross
2026-03-25 21:14:33 +00:00
parent 06fe73e2a3
commit d6487eae88
4 changed files with 33 additions and 5 deletions
+14 -2
View File
@@ -72,12 +72,16 @@ class RapidAdmin(VersionAdmin):
from shorts.models import Question as ShortQuestion
created = []
skipped = []
for rapid in queryset:
# allow admin or any author to perform migration
if request.user.is_superuser or rapid.author.filter(id=request.user.id).exists():
try:
q = ShortQuestion.from_rapid(rapid)
created.append(str(q.id))
if q is None:
skipped.append(str(rapid.id))
else:
created.append(str(q.id))
except Exception as e:
self.message_user(request, f"Failed to migrate Rapid {rapid.id}: {e}", level=messages.ERROR)
else:
@@ -85,6 +89,8 @@ class RapidAdmin(VersionAdmin):
if created:
self.message_user(request, f"Created shorts questions: {', '.join(created)}", level=messages.SUCCESS)
if skipped:
self.message_user(request, f"Skipped normal rapids (not migrated): {', '.join(skipped)}", level=messages.INFO)
migrate_to_shorts.short_description = "Migrate selected rapids to shorts"
@@ -97,13 +103,17 @@ class ExamAdmin(VersionAdmin, admin.ModelAdmin):
from shorts.models import Question as ShortQuestion
created = []
skipped = []
for exam in queryset:
for rapid in exam.exam_questions.all():
# only allow if admin or author of rapid
if request.user.is_superuser or rapid.author.filter(id=request.user.id).exists():
try:
q = ShortQuestion.from_rapid(rapid)
created.append(str(q.id))
if q is None:
skipped.append(str(rapid.id))
else:
created.append(str(q.id))
except Exception as e:
self.message_user(request, f"Failed to migrate Rapid {rapid.id}: {e}", level=messages.ERROR)
else:
@@ -111,6 +121,8 @@ class ExamAdmin(VersionAdmin, admin.ModelAdmin):
if created:
self.message_user(request, f"Created shorts questions: {', '.join(created)}", level=messages.SUCCESS)
if skipped:
self.message_user(request, f"Skipped normal rapids (not migrated): {', '.join(skipped)}", level=messages.INFO)
migrate_exam_questions.short_description = "Migrate all rapids in selected exam(s) to shorts"