refactor: move disciplines to admin-question

Resolves #59
This commit is contained in:
James Graham
2021-02-15 15:29:47 +00:00
parent 0b1f303d62
commit 7021f05b67
6 changed files with 67 additions and 14 deletions

View File

@@ -0,0 +1,63 @@
# Generated by Django 2.2.10 on 2021-02-15 13:54
import re
from django.db import migrations
from .utils.question_sets import port_question
def migrate_forward(apps, schema_editor):
"""Replace discipline text field with admin-editable question."""
PersonAnswerSet = apps.get_model('people', 'PersonAnswerSet')
discipline_question = port_question(apps,
'Disciplines', [],
is_multiple_choice=True,
allow_free_text=True)
for answerset in PersonAnswerSet.objects.all():
try:
disciplines = [
d.strip() for d in re.split(r'[,;]+', answerset.disciplines)
]
except TypeError:
continue
for discipline in disciplines:
answer, _ = discipline_question.answers.get_or_create(
text=discipline)
answerset.question_answers.add(answer)
def migrate_backward(apps, schema_editor):
"""Replace discipline admin-editable question with text field."""
PersonAnswerSet = apps.get_model('people', 'PersonAnswerSet')
PersonQuestion = apps.get_model('people', 'PersonQuestion')
discipline_question = PersonQuestion.objects.filter(
text='Disciplines').latest('version')
for answerset in PersonAnswerSet.objects.all():
answerset.disciplines = ', '.join(
answerset.question_answers.filter(
question=discipline_question).values_list('text', flat=True))
answerset.save()
PersonQuestion.objects.filter(text='Disciplines').delete()
class Migration(migrations.Migration):
dependencies = [
('people', '0033_person_sort_by_name'),
]
operations = [
migrations.RunPython(migrate_forward, migrate_backward),
migrations.RemoveField(
model_name='personanswerset',
name='disciplines',
),
]