diff --git a/api/masteriq/settings.py b/api/masteriq/settings.py index 219fe87..35b0021 100644 --- a/api/masteriq/settings.py +++ b/api/masteriq/settings.py @@ -11,6 +11,7 @@ """ from pathlib import Path +import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -123,3 +124,6 @@ # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + + +INIT_DATA_FOLDER = os.path.join('data', 'csv') \ No newline at end of file diff --git a/api/masteriqapp/migrations/0002_auto_20240303_1147.py b/api/masteriqapp/migrations/0002_auto_20240303_1147.py new file mode 100644 index 0000000..db955db --- /dev/null +++ b/api/masteriqapp/migrations/0002_auto_20240303_1147.py @@ -0,0 +1,45 @@ +# Generated by Django 5.0.2 on 2024-03-03 10:47 + +from django.db import migrations +from django.conf import settings +import pandas as pd +import os +import logging + + +def load_initial_data(apps, schema_editor): + print("\nStart of initial data migration, this may take some time...") + question_model = apps.get_model('masteriqapp', 'Question') + option_model = apps.get_model('masteriqapp', 'Option') + category_model = apps.get_model('masteriqapp', 'Category') + + directory = settings.INIT_DATA_FOLDER + logging.info(directory) + for filename in os.listdir(directory): + f = os.path.join(directory, filename) + if os.path.isfile(f) and filename.endswith(".csv"): + df = pd.read_csv(f) + category_name = filename[:-3].replace('-', ' ').title() + category = category_model.objects.create(name=category_name) + for row in df.index: + if pd.isnull(df['A'][row]) or pd.isnull(df['B'][row]): + continue + question = question_model.objects.create(text=df['Questions'][row], category=category) + right_option_text = df['Correct'][row] + option_model.objects.create(text=right_option_text, is_correct=True, question=question) + + for letter in ['A', 'B', 'C', 'D']: + if pd.isnull(df[letter][row]) or df[letter][row] == right_option_text: + continue + option_model.objects.create(text=df[letter][row], is_correct=False, question=question) + print("Initial data loaded!") + + +class Migration(migrations.Migration): + dependencies = [ + ('masteriqapp', '0001_initial'), + ] + + operations = [ + migrations.RunPython(load_initial_data) + ] diff --git a/api/masteriqapp/migrations/0003_alter_category_users.py b/api/masteriqapp/migrations/0003_alter_category_users.py new file mode 100644 index 0000000..0654f23 --- /dev/null +++ b/api/masteriqapp/migrations/0003_alter_category_users.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.2 on 2024-03-05 17:52 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('masteriqapp', '0002_auto_20240303_1147'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='category', + name='users', + field=models.ManyToManyField(through='masteriqapp.IQ', to=settings.AUTH_USER_MODEL), + ), + ]