Add primary_answer field to AnatomyQuestion model and create migration to backfill existing values

This commit is contained in:
Ross
2026-02-16 09:32:25 +00:00
parent 90c96333a1
commit f72ec82525
2 changed files with 75 additions and 24 deletions
@@ -0,0 +1,43 @@
"""Add primary_answer FK to AnatomyQuestion and backfill existing values.
This migration adds a nullable FK `primary_answer` on AnatomyQuestion
pointing to Answer, then backfills it using the current logic of
selecting the first non-proposed CORRECT answer (status '2').
"""
from django.db import migrations, models
import django.db.models.deletion
def forwards(apps, schema_editor):
AnatomyQuestion = apps.get_model('anatomy', 'AnatomyQuestion')
Answer = apps.get_model('anatomy', 'Answer')
# Select first non-proposed CORRECT answer (status '2') per question
for q in AnatomyQuestion.objects.all():
ans = Answer.objects.filter(question_id=q.pk, proposed=False, status='2').first()
if ans:
q.primary_answer_id = ans.pk
q.save(update_fields=['primary_answer'])
def backwards(apps, schema_editor):
AnatomyQuestion = apps.get_model('anatomy', 'AnatomyQuestion')
for q in AnatomyQuestion.objects.all():
q.primary_answer = None
q.save(update_fields=['primary_answer'])
class Migration(migrations.Migration):
dependencies = [
('anatomy', '0025_exam_created_exam_updated'),
]
operations = [
migrations.AddField(
model_name='anatomyquestion',
name='primary_answer',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='primary_for_questions', to='anatomy.answer'),
),
migrations.RunPython(forwards, backwards),
]