61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
from django.db import migrations
|
|
|
|
from utils.choices import MajorChoices, UniversityChoices
|
|
|
|
|
|
def seed_reference_models(apps, schema_editor):
|
|
Major = apps.get_model("users", "Major")
|
|
University = apps.get_model("users", "University")
|
|
User = apps.get_model("users", "User")
|
|
|
|
major_map = {}
|
|
for code, label in MajorChoices.choices:
|
|
obj, _ = Major.objects.update_or_create(
|
|
code=code,
|
|
defaults={"name": label},
|
|
)
|
|
major_map[code] = obj
|
|
|
|
university_map = {}
|
|
for code, label in UniversityChoices.choices:
|
|
obj, _ = University.objects.update_or_create(
|
|
code=code,
|
|
defaults={"name": label},
|
|
)
|
|
university_map[code] = obj
|
|
|
|
users = User.objects.all()
|
|
for user in users.iterator():
|
|
updates = []
|
|
major_code = getattr(user, "legacy_major", None)
|
|
if major_code:
|
|
major = major_map.get(major_code)
|
|
if major and user.major_id != major.id:
|
|
user.major_id = major.id
|
|
updates.append("major")
|
|
|
|
university_code = getattr(user, "legacy_university", None)
|
|
if university_code:
|
|
uni = university_map.get(university_code)
|
|
if uni and user.university_id != uni.id:
|
|
user.university_id = uni.id
|
|
updates.append("university")
|
|
|
|
if updates:
|
|
user.save(update_fields=updates)
|
|
|
|
|
|
def noop(apps, schema_editor):
|
|
pass
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
("users", "0004_major_university_models"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(seed_reference_models, noop),
|
|
]
|