migrate teh rest
This commit is contained in:
+17
-4
@@ -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
@@ -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
@@ -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
@@ -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)",
|
||||||
|
|||||||
Reference in New Issue
Block a user