44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""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),
|
|
]
|