Add migration actions for Rapid questions to Shorts in admin and templates

This commit is contained in:
Ross
2026-03-25 21:12:30 +00:00
parent ec0bad02c6
commit 06fe73e2a3
6 changed files with 168 additions and 0 deletions
+65
View File
@@ -286,6 +286,71 @@ class Question(QuestionBase):
return json
@classmethod
def from_rapid(cls, rapid):
"""Create a `shorts.Question` from a `rapids.Rapid` instance.
Fields mapped:
- `history` -> `history`
- `examination` m2m copied
- `author` m2m copied
- images copied to `QuestionImage`
- `answers` (from `rapids.Answer`) -> `SampleAnswer` with simple score mapping
All other fields are concatenated into `marking_guidance`.
"""
from rapids.models import Answer as RapidAnswer
guidance_parts = []
guidance_parts.append(f"Migrated from rapid id: {rapid.id}")
if rapid.laterality:
guidance_parts.append(f"Laterality: {rapid.laterality}")
abnormalities = ", ".join([a.name for a in rapid.abnormality.all()])
if abnormalities:
guidance_parts.append(f"Abnormalities: {abnormalities}")
regions = ", ".join([r.name for r in rapid.region.all()])
if regions:
guidance_parts.append(f"Regions: {regions}")
if rapid.question:
guidance_parts.append(f"Original question text: {rapid.question}")
marking_guidance = "\n".join(guidance_parts)
# Create the short question
q = cls.objects.create(
history=rapid.history,
marking_guidance=marking_guidance,
)
# copy m2m fields
try:
q.examination.set(rapid.examination.all())
except Exception:
pass
try:
q.author.set(rapid.author.all())
except Exception:
pass
# copy images
for img in rapid.images.all():
new_img = QuestionImage(
question=q,
image=img.image,
feedback_image=img.feedback_image,
filename=img.filename,
description=img.description,
image_md5_hash=img.image_md5_hash,
is_dicom=img.is_dicom,
)
new_img.save()
# Do not migrate rapid answers into shorts.SampleAnswer per request.
return q