Add migration actions for Rapid questions to Shorts in admin and templates
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user