add markers to exams (move away from group based to content based permissions)

This commit is contained in:
Ross
2024-08-05 10:45:38 +01:00
parent cff5a46e4c
commit e46f843284
33 changed files with 299 additions and 23 deletions
+5 -1
View File
@@ -8,7 +8,7 @@ from django.forms import (
)
from django.forms import inlineformset_factory
from generic.forms import ExamAuthorFormMixin, ExamFormMixin
from generic.forms import ExamAuthorFormMixin, ExamFormMixin, ExamMarkerFormMixin
from .models import (
Question,
@@ -38,4 +38,8 @@ class ExamForm(ExamFormMixin, ModelForm):
class ExamAuthorForm(ExamAuthorFormMixin):
class Meta(ExamAuthorFormMixin.Meta):
model = Exam
class ExamMarkerForm(ExamMarkerFormMixin):
class Meta(ExamMarkerFormMixin.Meta):
model = Exam
+20
View File
@@ -0,0 +1,20 @@
# Generated by Django 5.0.2 on 2024-08-05 09:43
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('physics', '0011_alter_exam_end_date_alter_exam_exam_results_emailed_and_more'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='exam',
name='markers',
field=models.ManyToManyField(blank=True, help_text='Authorised markers for the exam', related_name='physics_exam_markers', to=settings.AUTH_USER_MODEL),
),
]
+7
View File
@@ -167,6 +167,13 @@ class Exam(ExamBase):
related_name="physics_exam_author",
)
markers = models.ManyToManyField(
settings.AUTH_USER_MODEL,
blank=True,
help_text="Authorised markers for the exam",
related_name="physics_exam_markers",
)
valid_cid_users = models.ManyToManyField(
CidUser, blank=True, related_name="physics_exams"
)
+1
View File
@@ -33,6 +33,7 @@ urlpatterns.extend(
views.exam_take_overview,
name="exam_take_overview_user",
),
path("exam/<int:pk>/markers", views.ExamMarkersUpdate.as_view(), name="exam_markers"),
path(
"exam/<int:pk>/authors",
views.ExamAuthorUpdate.as_view(),
+8 -1
View File
@@ -58,7 +58,7 @@ from rest_framework.pagination import PageNumberPagination
from django.core.exceptions import PermissionDenied
from .forms import UserAnswerForm, ExamAuthorForm, ExamForm
from .forms import ExamMarkerForm, UserAnswerForm, ExamAuthorForm, ExamForm
from .decorators import (
user_is_author_or_physics_checker,
user_is_exam_author_or_physics_checker,
@@ -359,6 +359,13 @@ class ExamAuthorUpdate(
form_class = ExamAuthorForm
template_name = "author_form.html"
class ExamMarkersUpdate(
RevisionMixin, CheckCanEditMixin, LoginRequiredMixin, AuthorRequiredMixin, UpdateView
):
model = Exam
form_class = ExamMarkerForm
template_name = "markers_form.html"
class QuestionView(
LoginRequiredMixin, SingleTableMixin, FilterView, AuthorOrCheckerRequiredMixin