improve group management

This commit is contained in:
Ross
2023-11-20 11:55:49 +00:00
parent 93129fdc75
commit d414d3baa2
7 changed files with 261 additions and 7 deletions
+190 -3
View File
@@ -69,7 +69,6 @@ class ExamFormMixin:
else:
cid_user_group_queryset = CidUserGroup.objects.none()
user_user_group_queryset = UserUserGroup.objects.none()
self.fields["cid_user_groups"] = ModelMultipleChoiceField(
required=False,
@@ -79,6 +78,7 @@ class ExamFormMixin:
required=False,
queryset=user_user_group_queryset,
)
class Meta:
fields = [
"name",
@@ -129,9 +129,11 @@ class ExaminationForm(ModelForm):
model = Examination
fields = ["examination", "modality"]
class ExaminationMergeForm(Form):
examination_to_merge_into = ModelChoiceField(queryset=Examination.objects.all())
class QuestionNoteForm(ModelForm):
class Meta:
model = QuestionNote
@@ -172,7 +174,6 @@ class QuestionNoteForm(ModelForm):
class CidUserForm(ModelForm):
class Meta:
model = CidUser
fields = [
@@ -187,6 +188,7 @@ class CidUserForm(ModelForm):
"group",
]
class CidUserExamForm(ModelForm):
def __init__(self, *args, **kwargs):
if kwargs.get("instance"):
@@ -289,17 +291,18 @@ class CidUserExamForm(ModelForm):
self.save_m2m()
return instance
class Meta:
model = CidUser
fields = []
class CidUserGroupModelChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return f"{obj.cid} [{obj.email}]"
class CidUserGroupForm(ModelForm):
class Meta:
model = CidUserGroup
fields = ["name", "archive"]
@@ -322,6 +325,190 @@ class UserUserGroupForm(ModelForm):
fields = ["name", "archive", "users"]
class UserGroupExamForm(ModelForm):
GROUP_TYPES = [
"anatomy_user_user_groups",
"rapid_user_user_groups",
"longs_user_user_groups",
"physics_user_user_groups",
"sba_user_user_groups",
]
# users = UserUserGroupModelChoiceField(
# required=False,
# queryset=User.objects.all(),
# widget=FilteredSelectMultiple(verbose_name="Users", is_stacked=False),
# )
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 groups in self.GROUP_TYPES:
#instance.anatomy_cid_user_groups.clear()
#obj = getattr(instance,groups)
initial[groups] = [
t.pk for t in getattr(kwargs["instance"],groups).all()
]
ModelForm.__init__(self, *args, **kwargs)
super(UserGroupExamForm, self).__init__(*args, **kwargs)
self.fields["anatomy_user_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=AnatomyExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(
verbose_name="Anatomy Exams", is_stacked=False
),
)
self.fields["rapid_user_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=RapidsExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(verbose_name="Rapid Exams", is_stacked=False),
)
self.fields["longs_user_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=LongsExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(verbose_name="Longs Exams", is_stacked=False),
)
self.fields["physics_user_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=PhysicsExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(
verbose_name="Physics Exams", is_stacked=False
),
)
self.fields["sba_user_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=SbasExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(verbose_name="Sbas Exams", is_stacked=False),
)
class Meta:
model = UserUserGroup
fields = []
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 groups in self.GROUP_TYPES:
#instance.anatomy_cid_user_groups.clear()
obj = getattr(instance,groups)
obj.clear()
for exam in self.cleaned_data[groups]:
obj.add(exam.pk)
self.save_m2m = save_m2m
# Do we need to save all changes now?
# if commit:
instance.save()
self.save_m2m()
return instance
class CidGroupExamForm(ModelForm):
GROUP_TYPES = [
"anatomy_cid_user_groups",
"rapid_cid_user_groups",
"longs_cid_user_groups",
"physics_cid_user_groups",
"sba_cid_user_groups",
]
# users = CidUserGroupModelChoiceField(
# required=False,
# queryset=User.objects.all(),
# widget=FilteredSelectMultiple(verbose_name="Users", is_stacked=False),
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 groups in self.GROUP_TYPES:
#instance.anatomy_cid_user_groups.clear()
#obj = getattr(instance,groups)
initial[groups] = [
t.pk for t in getattr(kwargs["instance"],groups).all()
]
ModelForm.__init__(self, *args, **kwargs)
super(CidGroupExamForm, self).__init__(*args, **kwargs)
self.fields["anatomy_cid_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=AnatomyExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(
verbose_name="Anatomy Exams", is_stacked=False
),
)
self.fields["rapid_cid_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=RapidsExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(verbose_name="Rapid Exams", is_stacked=False),
)
self.fields["longs_cid_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=LongsExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(verbose_name="Longs Exams", is_stacked=False),
)
self.fields["physics_cid_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=PhysicsExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(
verbose_name="Physics Exams", is_stacked=False
),
)
self.fields["sba_cid_user_groups"] = ModelMultipleChoiceField(
required=False,
queryset=SbasExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(verbose_name="Sbas Exams", is_stacked=False),
)
class Meta:
model = CidUserGroup
fields = []
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 groups in self.GROUP_TYPES:
#instance.anatomy_cid_user_groups.clear()
obj = getattr(instance,groups)
obj.clear()
for exam in self.cleaned_data[groups]:
obj.add(exam.pk)
self.save_m2m = save_m2m
# Do we need to save all changes now?
# if commit:
instance.save()
self.save_m2m()
return instance
# class UserForm(ModelForm):
# class Meta:
# model = User