Merge branch 'master' of ssh://git.xkjq.uk:30001/ross/rad
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.2.4 on 2021-07-06 19:02
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('longs', '0035_longseries_open_access'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exam',
|
||||
name='exam_mode',
|
||||
field=models.BooleanField(default=False, help_text='If an exam should be taken in exam mode (users results will be submited to the server for marking)'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.2.4 on 2021-07-06 19:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('longs', '0036_alter_exam_exam_mode'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exam',
|
||||
name='time_limit',
|
||||
field=models.IntegerField(default=4500, help_text='Exam time limit (in seconds). Default is 4500 seconds (75 minutes)'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.2.4 on 2021-07-09 11:35
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('longs', '0037_alter_exam_time_limit'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exam',
|
||||
name='name',
|
||||
field=models.CharField(help_text='Name of the exam', max_length=200),
|
||||
),
|
||||
]
|
||||
+10
-9
@@ -145,12 +145,12 @@ class Long(models.Model):
|
||||
examinations = [series.get_examination() for series in self.series.all()]
|
||||
return "{} : {}".format(self.description, ", ".join(examinations))
|
||||
|
||||
def GetExams(self):
|
||||
def get_exams(self):
|
||||
e = self.exams.all().values_list("name", flat=True)
|
||||
exams = ", ".join(e)
|
||||
return exams
|
||||
|
||||
def GetImages(self, feedback=False):
|
||||
def get_images(self, feedback=False):
|
||||
qs = self.images.all()
|
||||
|
||||
if not feedback:
|
||||
@@ -160,16 +160,16 @@ class Long(models.Model):
|
||||
|
||||
return images
|
||||
|
||||
def GetImageUrls(self):
|
||||
def get_image_urls(self):
|
||||
return ",".join(
|
||||
["https://penracourses.org.uk{}".format(i.url) for i in self.GetImages()]
|
||||
["https://penracourses.org.uk{}".format(i.url) for i in self.get_images()]
|
||||
)
|
||||
|
||||
def GetUnmarkedAnswerCount(self):
|
||||
def get_unmarked_answer_count(self):
|
||||
answers = self.cid_user_answers.all()
|
||||
return len([ans for ans in answers if not ans.is_marked()])
|
||||
|
||||
def GetUnmarkedAnswers(self):
|
||||
def get_unmarked_answers(self):
|
||||
answers = self.cid_user_answers.all()
|
||||
return [ans for ans in answers if not ans.is_marked()]
|
||||
|
||||
@@ -266,7 +266,7 @@ class Long(models.Model):
|
||||
|
||||
|
||||
# def GetNonFeedbackQuestionImages(self):
|
||||
# return self.GetImages()
|
||||
# return self.get_images()
|
||||
|
||||
|
||||
def test_image_validator(file):
|
||||
@@ -527,7 +527,7 @@ class Exam(ExamBase):
|
||||
exam_questions = SortedManyToManyField(Long, related_name="exams", blank="true")
|
||||
|
||||
time_limit = models.IntegerField(
|
||||
help_text="Exam time limit (in seconds). Default is 4500 secondse (75 minutes)",
|
||||
help_text="Exam time limit (in seconds). Default is 4500 seconds (75 minutes)",
|
||||
default=4500,
|
||||
)
|
||||
|
||||
@@ -568,7 +568,7 @@ class Exam(ExamBase):
|
||||
return exam_question
|
||||
|
||||
|
||||
def get_exam_json(self, based=False):
|
||||
def get_exam_json(self, based=True):
|
||||
questions = self.exam_questions.all()
|
||||
|
||||
exam_questions = defaultdict(dict)
|
||||
@@ -619,6 +619,7 @@ class Exam(ExamBase):
|
||||
"exam_mode": True,
|
||||
"exam_order": exam_order,
|
||||
"questions": exam_questions,
|
||||
"based": based,
|
||||
#"question_requests": exam_questions,
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<p class="pre-whitespace"><b>Mark Scheme:</b> <pre>{{ question.mark_scheme }}</pre></p>
|
||||
</div>
|
||||
</p>
|
||||
<p><b>Exam(s):</b> {{question.GetExams}}</p>
|
||||
<p><b>Exam(s):</b> {{question.get_exams}}</p>
|
||||
</div>
|
||||
<div>
|
||||
Notes:
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
|
||||
<ul id="question-mark-list">
|
||||
{% for question in questions.all %}
|
||||
<li data-markcount={{question.GetUnmarkedAnswerCount}}><a href="{% url 'longs:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
|
||||
{{ question }}</a><br /> Answers to mark: {{question.GetUnmarkedAnswerCount}}</li>
|
||||
<li data-markcount={{question.get_unmarked_answer_count}}><a href="{% url 'longs:mark' pk=exam.pk sk=forloop.counter0 %}">Question {{forloop.counter }}:
|
||||
{{ question }}</a><br /> Answers to mark: {{question.get_unmarked_answer_count}}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+1
-1
@@ -655,7 +655,7 @@ def mark_answer(request, pk, sk, tk):
|
||||
raise Http404("User answer does not exist")
|
||||
|
||||
try:
|
||||
unmarked = question.GetUnmarkedAnswers()
|
||||
unmarked = question.get_unmarked_answers()
|
||||
next_unmarked_id = unmarked[0].cid
|
||||
if next_unmarked_id == tk:
|
||||
next_unmarked_id = unmarked[1].cid
|
||||
|
||||
Reference in New Issue
Block a user