.
This commit is contained in:
+1
-1
@@ -203,4 +203,4 @@ class BodyPartForm(ModelForm):
|
|||||||
class ExamForm(ModelForm):
|
class ExamForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Exam
|
model = Exam
|
||||||
fields = ["name", "time_limit", "exam_mode", "active"]
|
fields = ["name", "time_limit", "exam_mode", "active", "archive"]
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
{% load thumbnail %}
|
{% load thumbnail %}
|
||||||
<div class="longs">
|
<div class="longs">
|
||||||
|
<a href="{% url 'longs:exam_update' exam.id %}" title="Edit the Exam">Edit</a>
|
||||||
|
<a href="{% url 'longs:exam_delete' exam.id %}" title="Delete the Exam">Delete</a>
|
||||||
<a href="{% url 'admin:longs_exam_change' exam.id %}" title="Edit the Exam using the admin interface">Admin Edit</a>
|
<a href="{% url 'admin:longs_exam_change' exam.id %}" title="Edit the Exam using the admin interface">Admin Edit</a>
|
||||||
<h1>Exam: {{ exam.name }}</h1>
|
<h1>Exam: {{ exam.name }}</h1>
|
||||||
This exam has {{question_number}} questions. Time limit: {{exam.time_limit}} seconds.<br />
|
This exam has {{question_number}} questions. Time limit: {{exam.time_limit}} seconds.<br />
|
||||||
|
|||||||
@@ -59,6 +59,9 @@ urlpatterns = [
|
|||||||
),
|
),
|
||||||
path("exam/submit", views.LongExamViews.postExamAnswers, name="exam_answers_submit"),
|
path("exam/submit", views.LongExamViews.postExamAnswers, name="exam_answers_submit"),
|
||||||
path("exam/", views.LongExamViews.exam_list, name="exam_list"),
|
path("exam/", views.LongExamViews.exam_list, name="exam_list"),
|
||||||
|
path("exam/create", views.ExamCreate.as_view(), name="exam_create"),
|
||||||
|
path("exam/<int:pk>/update", views.ExamUpdate.as_view(), name="exam_update"),
|
||||||
|
path("exam/<int:pk>/delete", views.ExamDelete.as_view(), name="exam_delete"),
|
||||||
path("exam/json/", views.LongExamViews.active_exams, name="active_exams"),
|
path("exam/json/", views.LongExamViews.active_exams, name="active_exams"),
|
||||||
path("exam/json/<int:pk>", views.LongExamViews.exam_json, name="exam_json"),
|
path("exam/json/<int:pk>", views.LongExamViews.exam_json, name="exam_json"),
|
||||||
path("exam/json/<int:pk>/unbased", views.LongExamViews.exam_json_unbased, name="exam_json_unbased"),
|
path("exam/json/<int:pk>/unbased", views.LongExamViews.exam_json_unbased, name="exam_json_unbased"),
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ from .forms import (
|
|||||||
SeriesFormSet,
|
SeriesFormSet,
|
||||||
NoteForm,
|
NoteForm,
|
||||||
ExaminationForm,
|
ExaminationForm,
|
||||||
|
ExamForm,
|
||||||
)
|
)
|
||||||
from .models import (
|
from .models import (
|
||||||
Long, LongSeries,
|
Long, LongSeries,
|
||||||
@@ -955,6 +956,38 @@ def long_series_order_upload_filename(request, pk):
|
|||||||
|
|
||||||
LongExamViews = ExamViews(Exam, Long, "longs", "long", loadJsonAnswer)
|
LongExamViews = ExamViews(Exam, Long, "longs", "long", loadJsonAnswer)
|
||||||
|
|
||||||
|
|
||||||
|
class ExamCreate(RevisionMixin, LoginRequiredMixin, CreateView):
|
||||||
|
model = Exam
|
||||||
|
form_class = ExamForm
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
self.object = form.save(commit=False)
|
||||||
|
self.object.save()
|
||||||
|
|
||||||
|
form.instance.author.add(self.request.user.id)
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
class ExamUpdate(
|
||||||
|
RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView
|
||||||
|
):
|
||||||
|
model = Exam
|
||||||
|
form_class = ExamForm
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
self.object = form.save(commit=False)
|
||||||
|
self.object.save()
|
||||||
|
|
||||||
|
form.instance.author.add(self.request.user.id)
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
class ExamDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
|
||||||
|
model = Exam
|
||||||
|
success_url = reverse_lazy("longs:index")
|
||||||
|
|
||||||
|
|
||||||
class ExamViewSet(RevisionMixin, viewsets.ModelViewSet):
|
class ExamViewSet(RevisionMixin, viewsets.ModelViewSet):
|
||||||
queryset = Exam.objects.all().order_by('name')
|
queryset = Exam.objects.all().order_by('name')
|
||||||
serializer_class = ExamSerializer
|
serializer_class = ExamSerializer
|
||||||
|
|||||||
Reference in New Issue
Block a user