mirror of
https://github.com/Southampton-RSG/breccia-mapper.git
synced 2026-03-03 11:27:09 +00:00
refactor: migrate to question sets for person qs
This means we're starting to use the same system for person questions as for relationship questions
This commit is contained in:
65
people/migrations/0023_remove_person_role.py
Normal file
65
people/migrations/0023_remove_person_role.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# Generated by Django 2.2.10 on 2020-11-25 15:50
|
||||
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.db import migrations
|
||||
from django.utils import timezone
|
||||
|
||||
from .utils.question_sets import port_question
|
||||
|
||||
|
||||
def migrate_forward(apps, schema_editor):
|
||||
Person = apps.get_model('people', 'Person')
|
||||
Role = apps.get_model('people', 'Role')
|
||||
|
||||
role_question = port_question(apps, 'Role',
|
||||
Role.objects.values_list('name', flat=True))
|
||||
|
||||
for person in Person.objects.all():
|
||||
try:
|
||||
prev_set = person.answer_sets.latest('timestamp')
|
||||
|
||||
except ObjectDoesNotExist:
|
||||
prev_set = None
|
||||
|
||||
try:
|
||||
|
||||
answer_set = person.answer_sets.create()
|
||||
answer_set.question_answers.add(
|
||||
role_question.answers.get(text=person.role.name))
|
||||
|
||||
prev_set.replaced_timestamp = timezone.datetime.now()
|
||||
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
|
||||
def migrate_backward(apps, schema_editor):
|
||||
Person = apps.get_model('people', 'Person')
|
||||
Role = apps.get_model('people', 'Role')
|
||||
|
||||
for person in Person.objects.all():
|
||||
try:
|
||||
current_answers = person.answer_sets.latest('timestamp')
|
||||
role_answer = current_answers.question_answers.get(
|
||||
question__text='Role')
|
||||
person.role, _ = Role.objects.get_or_create(name=role_answer.text)
|
||||
person.save()
|
||||
|
||||
except ObjectDoesNotExist:
|
||||
pass
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('people', '0022_refactor_person_questions'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(migrate_forward, migrate_backward),
|
||||
migrations.RemoveField(
|
||||
model_name='person',
|
||||
name='role',
|
||||
),
|
||||
migrations.DeleteModel('Role'),
|
||||
]
|
||||
Reference in New Issue
Block a user