migrate teh rest

This commit is contained in:
Ross
2024-02-17 23:16:06 +00:00
parent 3a52855eb7
commit 5ea910cd63
10 changed files with 205 additions and 7 deletions
+17 -4
View File
@@ -88,13 +88,13 @@ from .models import (
from rapids.models import Rapid as RapidQuestion, ExamQuestionDetail as RapidsExamQuestionDetail from rapids.models import Rapid as RapidQuestion, ExamQuestionDetail as RapidsExamQuestionDetail
from rapids.models import Exam as RapidsExam from rapids.models import Exam as RapidsExam
from longs.models import Long as LongQuestion, LongSeries from longs.models import Long as LongQuestion, LongSeries, ExamQuestionDetail as LongsExamQuestionDetail
from longs.models import Exam as LongsExam from longs.models import Exam as LongsExam
from anatomy.models import AnatomyQuestion as AnatomyQuestion, ExamQuestionDetail as AnatomyExamQuestionDetail from anatomy.models import AnatomyQuestion as AnatomyQuestion, ExamQuestionDetail as AnatomyExamQuestionDetail
from anatomy.models import Exam as AnatomyExam from anatomy.models import Exam as AnatomyExam
from sbas.models import Question as SbasQuestion from sbas.models import Question as SbasQuestion, ExamQuestionDetail as SbasExamQuestionDetail
from sbas.models import Exam as SbasExam from sbas.models import Exam as SbasExam
from physics.models import Question as PhysicsQuestion from physics.models import Question as PhysicsQuestion, ExamQuestionDetail as PhysicsExamQuestionDetail
from physics.models import Exam as PhysicsExam from physics.models import Exam as PhysicsExam
from django.db.models import Case, When from django.db.models import Case, When
@@ -881,6 +881,7 @@ class ExamViews(View, LoginRequiredMixin):
# "examination", # "examination",
) )
.all() .all()
.order_by("examquestiondetail__sort_order")
) )
elif self.app_name == "rapids": elif self.app_name == "rapids":
questions = ( questions = (
@@ -911,10 +912,11 @@ class ExamViews(View, LoginRequiredMixin):
elif self.app_name == "physics": elif self.app_name == "physics":
questions = ( questions = (
exam.exam_questions.select_related("category").all() exam.exam_questions.select_related("category").all()
.order_by("examquestiondetail__sort_order")
# .prefetch_related("images", "abnormality", "region", "examination") # .prefetch_related("images", "abnormality", "region", "examination")
) )
else: else:
questions = exam.exam_questions.select_related().all() questions = exam.exam_questions.select_related().all().order_by("examquestiondetail__sort_order")
question_number = len(questions) question_number = len(questions)
@@ -1228,6 +1230,17 @@ class ExamViews(View, LoginRequiredMixin):
question_detail = RapidsExamQuestionDetail.objects.get( question_detail = RapidsExamQuestionDetail.objects.get(
rapid=question, exam=exam rapid=question, exam=exam
) )
case "longs":
question_detail = LongsExamQuestionDetail.objects.get(
long=question, exam=exam)
case "physics":
question_detail = PhysicsExamQuestionDetail.objects.get(
question=question, exam=exam
)
case "sbas":
question_detail = SbasExamQuestionDetail.objects.get(
question=question, exam=exam
)
case _: case _:
data = {"status": "error"} data = {"status": "error"}
return JsonResponse(data, status=200) return JsonResponse(data, status=200)
@@ -0,0 +1,30 @@
# Generated by Django 4.1.4 on 2024-02-17 23:03
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('longs', '0016_rename_exam_collection_exam_examcollection'),
]
operations = [
migrations.CreateModel(
name='ExamQuestionDetail',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sort_order', models.IntegerField(default=1000)),
('exam', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='longs.exam')),
('rapid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='longs.long')),
],
options={
'ordering': ('sort_order',),
},
),
migrations.RunSQL(
"""INSERT INTO longs_examquestiondetail
SELECT * FROM longs_exam_exam_questions;"""
),
]
@@ -0,0 +1,22 @@
# Generated by Django 4.1.4 on 2024-02-17 23:04
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('longs', '0017_examquestiondetail'),
]
operations = [
migrations.RemoveField(
model_name='exam',
name='exam_questions',
),
migrations.AddField(
model_name='exam',
name='exam_questions',
field=models.ManyToManyField(related_name='exams', through='longs.ExamQuestionDetail', to='longs.long'),
),
]
+10 -1
View File
@@ -409,12 +409,21 @@ class LongCreationDefault(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
return reverse("longs:long_create") return reverse("longs:long_create")
class ExamQuestionDetail(models.Model):
sort_order = models.IntegerField(default=1000)
exam = models.ForeignKey("Exam", on_delete=models.CASCADE)
rapid = models.ForeignKey(Long, on_delete=models.CASCADE)
class Meta:
ordering = ("sort_order",)
@reversion.register @reversion.register
class Exam(ExamBase): class Exam(ExamBase):
app_name = "longs" app_name = "longs"
exam_questions = SortedManyToManyField(Long, related_name="exams", blank="true") #exam_questions = SortedManyToManyField(Long, related_name="exams", blank="true")
exam_questions = models.ManyToManyField(Long, through=ExamQuestionDetail, related_name="exams")
time_limit = models.IntegerField( time_limit = models.IntegerField(
help_text="Exam time limit (in seconds). Default is 4500 seconds (75 minutes)", help_text="Exam time limit (in seconds). Default is 4500 seconds (75 minutes)",
@@ -0,0 +1,30 @@
# Generated by Django 4.1.4 on 2024-02-17 23:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('physics', '0006_rename_exam_collection_exam_examcollection'),
]
operations = [
migrations.CreateModel(
name='ExamQuestionDetail',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sort_order', models.IntegerField(default=1000)),
('exam', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='physics.exam')),
('rapid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='physics.question')),
],
options={
'ordering': ('sort_order',),
},
),
migrations.RunSQL(
"""INSERT INTO physics_examquestiondetail
SELECT * FROM physics_exam_exam_questions;"""
),
]
@@ -0,0 +1,22 @@
# Generated by Django 4.1.4 on 2024-02-17 23:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('physics', '0007_examquestiondetail'),
]
operations = [
migrations.RemoveField(
model_name='exam',
name='exam_questions',
),
migrations.AddField(
model_name='exam',
name='exam_questions',
field=models.ManyToManyField(related_name='exams', through='physics.ExamQuestionDetail', to='physics.question'),
),
]
+11 -1
View File
@@ -136,11 +136,21 @@ class Question(QuestionBase):
return ((0,) * 5, ("Not answered",) * 5) return ((0,) * 5, ("Not answered",) * 5)
class ExamQuestionDetail(models.Model):
sort_order = models.IntegerField(default=1000)
exam = models.ForeignKey("Exam", on_delete=models.CASCADE)
rapid = models.ForeignKey(Question, on_delete=models.CASCADE)
class Meta:
ordering = ("sort_order",)
#@reversion.register #@reversion.register
class Exam(ExamBase): class Exam(ExamBase):
app_name = "physics" app_name = "physics"
exam_questions = SortedManyToManyField(Question, related_name="exams", blank="true") #exam_questions = SortedManyToManyField(Question, related_name="exams", blank="true")
exam_questions = models.ManyToManyField(Question, through=ExamQuestionDetail, related_name="exams")
time_limit = models.IntegerField( time_limit = models.IntegerField(
help_text="Exam time limit (in seconds)", help_text="Exam time limit (in seconds)",
@@ -0,0 +1,30 @@
# Generated by Django 4.1.4 on 2024-02-17 23:11
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sbas', '0006_rename_exam_collection_exam_examcollection'),
]
operations = [
migrations.CreateModel(
name='ExamQuestionDetail',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sort_order', models.IntegerField(default=1000)),
('exam', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sbas.exam')),
('rapid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sbas.question')),
],
options={
'ordering': ('sort_order',),
},
),
migrations.RunSQL(
"""INSERT INTO sbas_examquestiondetail
SELECT * FROM sbas_exam_exam_questions;"""
),
]
@@ -0,0 +1,22 @@
# Generated by Django 4.1.4 on 2024-02-17 23:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sbas', '0007_examquestiondetail'),
]
operations = [
migrations.RemoveField(
model_name='exam',
name='exam_questions',
),
migrations.AddField(
model_name='exam',
name='exam_questions',
field=models.ManyToManyField(related_name='exams', through='sbas.ExamQuestionDetail', to='sbas.question'),
),
]
+11 -1
View File
@@ -154,11 +154,21 @@ class Question(QuestionBase):
return self.stem.replace("<p>", "", 1).replace("</p>", "", 1) return self.stem.replace("<p>", "", 1).replace("</p>", "", 1)
class ExamQuestionDetail(models.Model):
sort_order = models.IntegerField(default=1000)
exam = models.ForeignKey("Exam", on_delete=models.CASCADE)
rapid = models.ForeignKey(Question, on_delete=models.CASCADE)
class Meta:
ordering = ("sort_order",)
@reversion.register @reversion.register
class Exam(ExamBase): class Exam(ExamBase):
app_name = "sbas" app_name = "sbas"
exam_questions = SortedManyToManyField(Question, related_name="exams", blank="true") #exam_questions = SortedManyToManyField(Question, related_name="exams", blank="true")
exam_questions = models.ManyToManyField(Question, through=ExamQuestionDetail, related_name="exams")
time_limit = models.IntegerField( time_limit = models.IntegerField(
help_text="Exam time limit (in seconds)", help_text="Exam time limit (in seconds)",