.
This commit is contained in:
@@ -86,6 +86,7 @@ urlpatterns = [
|
|||||||
path("exam/", views.AnatomyExamViews.exam_list, name="exam_list"),
|
path("exam/", views.AnatomyExamViews.exam_list, name="exam_list"),
|
||||||
path("exam/all", views.AnatomyExamViews.exam_list_all, name="exam_list_all"),
|
path("exam/all", views.AnatomyExamViews.exam_list_all, name="exam_list_all"),
|
||||||
path("exam/create", views.ExamCreate.as_view(), name="exam_create"),
|
path("exam/create", views.ExamCreate.as_view(), name="exam_create"),
|
||||||
|
path("exam/<int:exam_id>/clone", views.ExamClone.as_view(), name="exam_clone"),
|
||||||
path("exam/<int:pk>/update", views.ExamUpdate.as_view(), name="exam_update"),
|
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/<int:pk>/delete", views.ExamDelete.as_view(), name="exam_delete"),
|
||||||
path("exam/json/", views.AnatomyExamViews.active_exams, name="active_exams"),
|
path("exam/json/", views.AnatomyExamViews.active_exams, name="active_exams"),
|
||||||
|
|||||||
+4
-1
@@ -47,7 +47,7 @@ from .models import (
|
|||||||
# IncorrectAnswers,
|
# IncorrectAnswers,
|
||||||
)
|
)
|
||||||
from generic.models import Examination
|
from generic.models import Examination
|
||||||
from generic.views import ExamViews, GenericViewBase
|
from generic.views import ExamCloneMixin, ExamViews, GenericViewBase
|
||||||
from reversion.views import RevisionMixin
|
from reversion.views import RevisionMixin
|
||||||
|
|
||||||
from .decorators import user_is_author_or_anatomy_checker
|
from .decorators import user_is_author_or_anatomy_checker
|
||||||
@@ -1031,3 +1031,6 @@ class ExamDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
|
|||||||
success_url = reverse_lazy("anatomy:index")
|
success_url = reverse_lazy("anatomy:index")
|
||||||
|
|
||||||
GenericViews = GenericViewBase("anatomy", AnatomyQuestion, CidUserAnswer, Exam)
|
GenericViews = GenericViewBase("anatomy", AnatomyQuestion, CidUserAnswer, Exam)
|
||||||
|
|
||||||
|
class ExamClone(ExamCloneMixin, ExamCreate):
|
||||||
|
"""Clone exam view"""
|
||||||
@@ -84,6 +84,7 @@ urlpatterns = [
|
|||||||
path("exam/", views.RapidExamViews.exam_list, name="exam_list"),
|
path("exam/", views.RapidExamViews.exam_list, name="exam_list"),
|
||||||
path("exam/all", views.RapidExamViews.exam_list_all, name="exam_list_all"),
|
path("exam/all", views.RapidExamViews.exam_list_all, name="exam_list_all"),
|
||||||
path("exam/create", views.ExamCreate.as_view(), name="exam_create"),
|
path("exam/create", views.ExamCreate.as_view(), name="exam_create"),
|
||||||
|
path("exam/<int:exam_id>/clone", views.ExamClone.as_view(), name="exam_clone"),
|
||||||
path("exam/<int:pk>/update", views.ExamUpdate.as_view(), name="exam_update"),
|
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/<int:pk>/delete", views.ExamDelete.as_view(), name="exam_delete"),
|
||||||
path("exam/json/", views.RapidExamViews.active_exams, name="active_exams"),
|
path("exam/json/", views.RapidExamViews.active_exams, name="active_exams"),
|
||||||
|
|||||||
+3
-1
@@ -40,7 +40,7 @@ from .models import (
|
|||||||
CidUserAnswer,
|
CidUserAnswer,
|
||||||
)
|
)
|
||||||
|
|
||||||
from generic.views import ExamViews, GenericViewBase
|
from generic.views import ExamCloneMixin, ExamViews, GenericViewBase
|
||||||
|
|
||||||
from reversion.views import RevisionMixin
|
from reversion.views import RevisionMixin
|
||||||
|
|
||||||
@@ -1096,3 +1096,5 @@ def question_save_annotation(request, pk):
|
|||||||
data = {"status": "error"}
|
data = {"status": "error"}
|
||||||
return JsonResponse(data, status=400)
|
return JsonResponse(data, status=400)
|
||||||
|
|
||||||
|
class ExamClone(ExamCloneMixin, ExamCreate):
|
||||||
|
"""Clone exam view"""
|
||||||
Reference in New Issue
Block a user