diff --git a/cats/migrations/0007_alter_topic_type_id.py b/cats/migrations/0007_alter_topic_type_id.py new file mode 100644 index 0000000..540bb75 --- /dev/null +++ b/cats/migrations/0007_alter_topic_type_id.py @@ -0,0 +1,44 @@ +# Generated by Django 4.2.16 on 2024-09-18 16:55 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cats", "0006_change_auto_id_fields_to_bigautofield"), + ] + + operations = [ + migrations.AlterModelTable( + name="topictype", + table=None, + ), + migrations.AlterField( + model_name="topic", + name="type_id", + field=models.ForeignKey( + db_column="type_id", + on_delete=django.db.models.deletion.CASCADE, + to="cats.topictype", + ), + ), + migrations.RenameField( + model_name="topic", + old_name="type_id", + new_name="topic_type", + ), + migrations.AlterField( + model_name="topic", + name="topic_type", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="cats.topictype" + ), + ), + migrations.RenameField( + model_name="topic", + old_name="numofqu", + new_name="number_of_questions", + ), + ] diff --git a/cats/migrations/0008_alter_questiontype_options_and_more.py b/cats/migrations/0008_alter_questiontype_options_and_more.py new file mode 100644 index 0000000..a27561d --- /dev/null +++ b/cats/migrations/0008_alter_questiontype_options_and_more.py @@ -0,0 +1,37 @@ +# Generated by Django 4.2.16 on 2024-09-18 17:23 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("cats", "0007_alter_topic_type_id"), + ] + + operations = [ + migrations.AlterModelOptions( + name="questiontype", + options={"verbose_name": "Question Type"}, + ), + migrations.AlterModelTableComment( + name="questiontype", + table_comment=None, + ), + migrations.RemoveField( + model_name="questiontype", + name="de", + ), + migrations.RemoveField( + model_name="questiontype", + name="en", + ), + migrations.RemoveField( + model_name="questiontype", + name="fr", + ), + migrations.AlterModelTable( + name="questiontype", + table=None, + ), + ] diff --git a/cats/migrations/0009_questiontypename.py b/cats/migrations/0009_questiontypename.py new file mode 100644 index 0000000..331bcdf --- /dev/null +++ b/cats/migrations/0009_questiontypename.py @@ -0,0 +1,47 @@ +# Generated by Django 4.2.16 on 2024-09-18 17:28 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cats", "0008_alter_questiontype_options_and_more"), + ] + + operations = [ + migrations.CreateModel( + name="QuestionTypeName", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("lang", models.CharField(max_length=5)), + ("name", models.CharField(max_length=25)), + ( + "question_type", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="cats.questiontype", + ), + ), + ], + options={ + "verbose_name": "Question Type Name", + "unique_together": {("question_type", "lang")}, + }, + ), + migrations.RunSQL( + "INSERT INTO cats_questiontypename (question_type_id, lang, name) SELECT qt_id, lang, qt_desc FROM questiontype_v2" + ), + migrations.DeleteModel( + name="QuestionTypeV2", + ), + ] diff --git a/cats/migrations/0010_alter_model_tables.py b/cats/migrations/0010_alter_model_tables.py new file mode 100644 index 0000000..4b3b11b --- /dev/null +++ b/cats/migrations/0010_alter_model_tables.py @@ -0,0 +1,73 @@ +# Generated by Django 4.2.16 on 2024-09-18 17:37 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("cats", "0009_questiontypename"), + ] + + operations = [ + migrations.AlterModelOptions( + name="question", + options={"verbose_name": "Question"}, + ), + migrations.AlterModelOptions( + name="topic", + options={"verbose_name": "Topic"}, + ), + migrations.AlterModelTableComment( + name="question", + table_comment=None, + ), + migrations.AlterModelTableComment( + name="topic", + table_comment=None, + ), + migrations.AlterModelTable( + name="answer", + table=None, + ), + migrations.AlterModelTable( + name="incorrectanswer", + table=None, + ), + migrations.AlterModelTable( + name="learnprogress", + table=None, + ), + migrations.AlterModelTable( + name="question", + table=None, + ), + migrations.AlterModelTable( + name="questiondescription", + table=None, + ), + migrations.AlterModelTable( + name="schemaversion", + table=None, + ), + migrations.AlterModelTable( + name="statistics", + table=None, + ), + migrations.AlterModelTable( + name="temp", + table=None, + ), + migrations.AlterModelTable( + name="topic", + table=None, + ), + migrations.AlterModelTable( + name="user", + table=None, + ), + migrations.AlterModelTable( + name="useraddress", + table=None, + ), + ] diff --git a/cats/migrations/0011_rename_fields.py b/cats/migrations/0011_rename_fields.py new file mode 100644 index 0000000..e516e76 --- /dev/null +++ b/cats/migrations/0011_rename_fields.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.16 on 2024-09-18 17:43 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("cats", "0010_alter_model_tables"), + ] + + operations = [ + migrations.RenameField( + model_name="question", + old_name="translationstatus", + new_name="translation_status", + ), + migrations.RenameField( + model_name="user", + old_name="sendcert", + new_name="send_certificate", + ), + migrations.RenameField( + model_name="useraddress", + old_name="housenumber", + new_name="house_number", + ), + ] diff --git a/cats/migrations/0012_add_question_foreign_keys.py b/cats/migrations/0012_add_question_foreign_keys.py new file mode 100644 index 0000000..9d22666 --- /dev/null +++ b/cats/migrations/0012_add_question_foreign_keys.py @@ -0,0 +1,38 @@ +# Generated by Django 4.2.16 on 2024-09-18 17:49 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cats", "0011_rename_fields"), + ] + + operations = [ + migrations.AlterField( + model_name="question", + name="qt_id", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="cats.questiontype" + ), + ), + migrations.RenameField( + model_name="question", + old_name="qt_id", + new_name="question_type", + ), + migrations.AlterField( + model_name="question", + name="t_id", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="cats.topic" + ), + ), + migrations.RenameField( + model_name="question", + old_name="t_id", + new_name="topic", + ), + ] diff --git a/cats/migrations/0013_question_explanation.py b/cats/migrations/0013_question_explanation.py new file mode 100644 index 0000000..d46b563 --- /dev/null +++ b/cats/migrations/0013_question_explanation.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.16 on 2024-09-18 17:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("cats", "0012_add_question_foreign_keys"), + ] + + operations = [ + migrations.AddField( + model_name="question", + name="explanation", + field=models.TextField(blank=True), + ), + migrations.RunSQL( + "UPDATE cats_question JOIN cats_questiondescription ON cats_question.id=cats_questiondescription.q_id" + " SET cats_question.explanation = cats_questiondescription.description" + ), + migrations.DeleteModel("QuestionDescription"), + ] diff --git a/cats/migrations/0014_change_question_self_reference.py b/cats/migrations/0014_change_question_self_reference.py new file mode 100644 index 0000000..a546c7d --- /dev/null +++ b/cats/migrations/0014_change_question_self_reference.py @@ -0,0 +1,30 @@ +# Generated by Django 4.2.16 on 2024-09-18 18:08 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cats", "0013_question_explanation"), + ] + + operations = [ + migrations.AlterField( + model_name="question", + name="ref_q_id", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="referenced", + to="cats.question", + ), + ), + migrations.RenameField( + model_name="question", + old_name="ref_q_id", + new_name="reference_question", + ), + ] diff --git a/cats/migrations/0015_refactor_answer_model.py b/cats/migrations/0015_refactor_answer_model.py new file mode 100644 index 0000000..bf06bff --- /dev/null +++ b/cats/migrations/0015_refactor_answer_model.py @@ -0,0 +1,47 @@ +# Generated by Django 4.2.16 on 2024-09-18 18:13 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cats", "0014_change_question_self_reference"), + ] + + operations = [ + migrations.AlterField( + model_name="answer", + name="q_id", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="cats.question" + ), + ), + migrations.RenameField( + model_name="answer", + old_name="q_id", + new_name="question", + ), + migrations.AlterField( + model_name="answer", + name="correct", + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name="answer", + name="ref_a_id", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="referenced", + to="cats.answer", + ), + ), + migrations.RenameField( + model_name="answer", + old_name="ref_a_id", + new_name="reference_answer", + ), + ] diff --git a/cats/models.py b/cats/models.py index c2b03d2..df83258 100644 --- a/cats/models.py +++ b/cats/models.py @@ -11,151 +11,141 @@ from django.db import models class TopicType(models.Model): text = models.CharField(max_length=255) - class Meta: - db_table = 'topic_type' - class Topic(models.Model): - topic = models.CharField(unique=True, max_length=50, db_comment='Thema') + topic = models.CharField(unique=True, max_length=50, db_comment="Thema") active = models.IntegerField() - numofqu = models.IntegerField(db_column='numOfQu') # Field name made lowercase. + number_of_questions = models.IntegerField( + db_column="numOfQu" + ) # Field name made lowercase. percentage = models.IntegerField() lang = models.CharField(max_length=42, blank=True, null=True) - type_id = models.IntegerField(blank=True, null=True) + topic_type = models.ForeignKey(TopicType, on_delete=models.CASCADE) class Meta: - db_table = 'topics' - db_table_comment = 'Themen' + verbose_name = "Topic" class QuestionType(models.Model): - de = models.CharField(db_column='DE', max_length=25, db_comment='Fragetyp') # Field name made lowercase. - en = models.CharField(db_column='EN', max_length=25) # Field name made lowercase. - fr = models.CharField(db_column='FR', max_length=25, blank=True, null=True) # Field name made lowercase. + class Meta: + verbose_name = "Question Type" + + +class QuestionTypeName(models.Model): + question_type = models.ForeignKey(QuestionType, on_delete=models.CASCADE) + lang = models.CharField(max_length=5) + name = models.CharField(max_length=25) class Meta: - db_table = 'questiontype' - db_table_comment = 'Fragetypen' - - -class QuestionTypeV2(models.Model): - qt_id = models.AutoField(primary_key=True, db_comment='Fragetypenschlssel') # The composite primary key (qt_id, lang) found, that is not supported. The first column is selected. - lang = models.CharField(max_length=5, db_comment='Sprache') - qt_desc = models.CharField(max_length=25, db_comment='Fragetyp') - - class Meta: - db_table = 'questiontype_v2' - unique_together = (('qt_id', 'lang'),) - db_table_comment = 'Fragetypen' + verbose_name = "Question Type Name" + unique_together = (("question_type", "lang"),) class Question(models.Model): - qt_id = models.IntegerField(db_comment='Fragetyp') - t_id = models.IntegerField(db_comment='Topic_id') - question = models.TextField(db_comment='Frage') + question_type = models.ForeignKey(QuestionType, on_delete=models.CASCADE) + topic = models.ForeignKey(Topic, on_delete=models.CASCADE) + question = models.TextField(db_comment="Frage") active = models.CharField(max_length=1) description = models.CharField(max_length=1) - ref_q_id = models.IntegerField(blank=True, null=True) - translationstatus = models.IntegerField(blank=True, null=True) + reference_question = models.ForeignKey( + "Question", + related_name="referenced", + on_delete=models.CASCADE, + null=True, + blank=True, + ) + translation_status = models.IntegerField(blank=True, null=True) + explanation = models.TextField(blank=True) class Meta: - db_table = 'questions' - db_table_comment = 'Fragen' - - -class QuestionDescription(models.Model): - q_id = models.IntegerField(primary_key=True) - description = models.TextField() - - class Meta: - db_table = 'question_description' + verbose_name = "Question" class Answer(models.Model): - q_id = models.IntegerField() + question = models.ForeignKey(Question, on_delete=models.CASCADE) answer = models.TextField() - correct = models.IntegerField() - ref_a_id = models.IntegerField(blank=True, null=True) - - class Meta: - db_table = 'answers' + correct = models.BooleanField(default=False) + reference_answer = models.ForeignKey( + "Answer", + related_name="referenced", + on_delete=models.CASCADE, + null=True, + blank=True, + ) class User(models.Model): - user_id = models.CharField(primary_key=True, max_length=10) # The composite primary key (user_id, root) found, that is not supported. The first column is selected. - cn_name = models.CharField(db_column='CN_name', max_length=100) # Field name made lowercase. + user_id = models.CharField( + primary_key=True, max_length=10 + ) # The composite primary key (user_id, root) found, that is not supported. The first column is selected. + cn_name = models.CharField( + db_column="CN_name", max_length=100 + ) # Field name made lowercase. lang = models.CharField(max_length=2) admin = models.CharField(max_length=1) email = models.CharField(max_length=100) - sendcert = models.CharField(db_column='sendCert', max_length=13) # Field name made lowercase. + send_certificate = models.CharField( + db_column="sendCert", max_length=13 + ) # Field name made lowercase. root = models.CharField(max_length=45) class Meta: - db_table = 'user' - unique_together = (('user_id', 'root'),) + unique_together = (("user_id", "root"),) class UserAddress(models.Model): - user_id = models.CharField(primary_key=True, max_length=10) # The composite primary key (user_id, root) found, that is not supported. The first column is selected. + user_id = models.CharField( + primary_key=True, max_length=10 + ) # The composite primary key (user_id, root) found, that is not supported. The first column is selected. root = models.CharField(max_length=45) firstname = models.CharField(max_length=25) lastname = models.CharField(max_length=25) street = models.CharField(max_length=50) - housenumber = models.CharField(max_length=5) + house_number = models.CharField(max_length=5) zipcode = models.CharField(max_length=10) city = models.CharField(max_length=30) state = models.CharField(max_length=50) country = models.CharField(max_length=50) class Meta: - db_table = 'user_address' - unique_together = (('user_id', 'root'),) + unique_together = (("user_id", "root"),) class LearnProgress(models.Model): user_id = models.CharField(max_length=15) root = models.CharField(max_length=45) - date = models.DateTimeField(db_comment='Uhrzeit und Datum') - t_id = models.IntegerField(db_comment='Themen ID') - number = models.IntegerField(db_comment='Anzahl der Fragen') - correct = models.IntegerField(db_comment='Richtige Fragen') - wrong = models.IntegerField(db_comment='Anzahl der falschen Antworten') - percentage = models.DecimalField(max_digits=5, decimal_places=0, blank=True, null=True) + date = models.DateTimeField(db_comment="Uhrzeit und Datum") + t_id = models.IntegerField(db_comment="Themen ID") + number = models.IntegerField(db_comment="Anzahl der Fragen") + correct = models.IntegerField(db_comment="Richtige Fragen") + wrong = models.IntegerField(db_comment="Anzahl der falschen Antworten") + percentage = models.DecimalField( + max_digits=5, decimal_places=0, blank=True, null=True + ) uploaded = models.IntegerField(blank=True, null=True) passed = models.IntegerField() - class Meta: - db_table = 'learnprogress' - class IncorrectAnswer(models.Model): - lp_id = models.IntegerField(primary_key=True) # The composite primary key (lp_id, q_id) found, that is not supported. The first column is selected. + lp_id = models.IntegerField( + primary_key=True + ) # The composite primary key (lp_id, q_id) found, that is not supported. The first column is selected. q_id = models.IntegerField() class Meta: - db_table = 'answers_incorrect' - unique_together = (('lp_id', 'q_id'),) + unique_together = (("lp_id", "q_id"),) class SchemaVersion(models.Model): version = models.IntegerField(unique=True) when = models.DateTimeField() - class Meta: - db_table = 'schema_version' - class Statistics(models.Model): - q_id = models.IntegerField(db_comment='Frage Id') - count = models.IntegerField(db_comment='Zählen von Antworten') - - class Meta: - db_table = 'statistics' + q_id = models.IntegerField(db_comment="Frage Id") + count = models.IntegerField(db_comment="Zählen von Antworten") class Temp(models.Model): uid = models.CharField(max_length=10, blank=True, null=True) number = models.IntegerField(blank=True, null=True) - - class Meta: - db_table = 'temp'