continue building examcollections

This commit is contained in:
Ross
2024-02-05 18:30:35 +00:00
parent 269a86c25b
commit b1da429036
30 changed files with 546 additions and 70 deletions
+84 -10
View File
@@ -17,6 +17,7 @@ from generic.models import (
CidUser,
CidUserGroup,
Examination,
ExamCollection,
QuestionNote,
Supervisor,
UserGrades,
@@ -333,6 +334,7 @@ class UserGroupExamForm(ModelForm):
"physics_user_user_groups",
"sba_user_user_groups",
]
# users = UserUserGroupModelChoiceField(
# required=False,
# queryset=User.objects.all(),
@@ -346,10 +348,10 @@ class UserGroupExamForm(ModelForm):
# The widget for a ModelMultipleChoiceField expects
# a list of primary key for the selected data.
for groups in self.GROUP_TYPES:
#instance.anatomy_cid_user_groups.clear()
#obj = getattr(instance,groups)
# instance.anatomy_cid_user_groups.clear()
# obj = getattr(instance,groups)
initial[groups] = [
t.pk for t in getattr(kwargs["instance"],groups).all()
t.pk for t in getattr(kwargs["instance"], groups).all()
]
ModelForm.__init__(self, *args, **kwargs)
@@ -401,8 +403,8 @@ class UserGroupExamForm(ModelForm):
old_save_m2m()
for groups in self.GROUP_TYPES:
#instance.anatomy_cid_user_groups.clear()
obj = getattr(instance,groups)
# instance.anatomy_cid_user_groups.clear()
obj = getattr(instance, groups)
obj.clear()
for exam in self.cleaned_data[groups]:
obj.add(exam.pk)
@@ -438,10 +440,10 @@ class CidGroupExamForm(ModelForm):
# The widget for a ModelMultipleChoiceField expects
# a list of primary key for the selected data.
for groups in self.GROUP_TYPES:
#instance.anatomy_cid_user_groups.clear()
#obj = getattr(instance,groups)
# instance.anatomy_cid_user_groups.clear()
# obj = getattr(instance,groups)
initial[groups] = [
t.pk for t in getattr(kwargs["instance"],groups).all()
t.pk for t in getattr(kwargs["instance"], groups).all()
]
ModelForm.__init__(self, *args, **kwargs)
@@ -493,8 +495,8 @@ class CidGroupExamForm(ModelForm):
old_save_m2m()
for groups in self.GROUP_TYPES:
#instance.anatomy_cid_user_groups.clear()
obj = getattr(instance,groups)
# instance.anatomy_cid_user_groups.clear()
obj = getattr(instance, groups)
obj.clear()
for exam in self.cleaned_data[groups]:
obj.add(exam.pk)
@@ -549,3 +551,75 @@ class SupervisorForm(ModelForm):
class Meta:
model = Supervisor
exclude = ("",)
class ExamCollectionForm(ModelForm):
GROUP_TYPES = (
("Rapid Exams", "rapids_exams", RapidsExam),
("Long Exams", "longs_exams", LongsExam),
("SBA Exams", "sbas_exams", SbasExam),
("Physic Exams", "physics_exams", PhysicsExam),
("Anatomy Exams", "anatomy_exams", AnatomyExam),
)
class Meta:
model = ExamCollection
exclude = ("",)
def __init__(self, *args, **kwargs):
if kwargs.get("instance"):
# We get the 'initial' keyword argument or initialize it
# as a dict if it didn't exist.
initial = kwargs.setdefault("initial", {})
# The widget for a ModelMultipleChoiceField expects
# a list of primary key for the selected data.
for name, reverse_prop, exam_obj in self.GROUP_TYPES:
# instance.anatomy_cid_user_groups.clear()
# obj = getattr(instance,groups)
initial[reverse_prop] = [
t.pk for t in getattr(kwargs["instance"], reverse_prop).all()
]
ModelForm.__init__(self, *args, **kwargs)
super(ExamCollectionForm, self).__init__(*args, **kwargs)
for name, reverse_prop, exam_obj in self.GROUP_TYPES:
self.fields[reverse_prop] = ModelMultipleChoiceField(
required=False,
queryset=exam_obj.objects.filter(archive=False),
widget=FilteredSelectMultiple(
verbose_name=name, is_stacked=False
),
)
def save(self, commit=True):
# Get the unsaved Long instance
instance = ModelForm.save(self, False)
# Prepare a 'save_m2m' method for the form,
old_save_m2m = self.save_m2m
def save_m2m():
old_save_m2m()
for name, reverse_prop, exam_obj in self.GROUP_TYPES:
# instance.anatomy_cid_user_groups.clear()
obj = getattr(instance, reverse_prop)
obj.clear()
for exam in self.cleaned_data[reverse_prop]:
obj.add(exam)
self.save_m2m = save_m2m
# Do we need to save all changes now?
# if commit:
instance.save()
self.save_m2m()
return instance
class ExamCollectionCloneForm(ModelForm):
class Meta:
model = ExamCollection
fields = ("name", "date")