Complete supervisor model and start improving forms

This commit is contained in:
Ross
2022-11-28 09:50:07 +00:00
parent 653baa85ff
commit 747bf93373
27 changed files with 309 additions and 183 deletions
+62 -19
View File
@@ -7,14 +7,22 @@ from django.forms import (
CharField,
HiddenInput,
EmailField,
IntegerField
IntegerField,
)
from django.forms import inlineformset_factory
from atlas.models import CaseCollection
from django.contrib.auth.models import User
from generic.models import CidUser, CidUserGroup, Examination, QuestionNote, Supervisor, UserGrades, UserProfile, UserUserGroup
from generic.models import (
CidUser,
CidUserGroup,
Examination,
QuestionNote,
Supervisor,
UserGrades,
UserProfile,
UserUserGroup,
)
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.forms.widgets import RadioSelect, TextInput, Textarea
@@ -50,6 +58,7 @@ from sbas.models import CidUserAnswer as SbasCidUserAnswer
from sbas.models import Exam as SbasExam
from sbas.models import Question as SbasQuestion
class ExamFormMixin:
class Meta:
fields = [
@@ -64,7 +73,7 @@ class ExamFormMixin:
"archive",
"cid_user_groups",
"user_user_groups",
#"author",
# "author",
]
def save(self, commit=True):
@@ -75,6 +84,7 @@ class ExamFormMixin:
return instance
class ExamAuthorFormMixin(ModelForm):
class Meta:
fields = ["author"]
@@ -133,7 +143,6 @@ class QuestionNoteForm(ModelForm):
class CidUserForm(ModelForm):
def __init__(self, *args, **kwargs):
if kwargs.get("instance"):
# We get the 'initial' keyword argument or initialize it
@@ -141,12 +150,22 @@ class CidUserForm(ModelForm):
initial = kwargs.setdefault("initial", {})
# The widget for a ModelMultipleChoiceField expects
# a list of primary key for the selected data.
initial["physics_exams"] = [t.pk for t in kwargs["instance"].physics_exams.all()]
initial["anatomy_exams"] = [t.pk for t in kwargs["instance"].anatomy_exams.all()]
initial["physics_exams"] = [
t.pk for t in kwargs["instance"].physics_exams.all()
]
initial["anatomy_exams"] = [
t.pk for t in kwargs["instance"].anatomy_exams.all()
]
initial["sba_exams"] = [t.pk for t in kwargs["instance"].sba_exams.all()]
initial["rapid_exams"] = [t.pk for t in kwargs["instance"].rapid_exams.all()]
initial["longs_exams"] = [t.pk for t in kwargs["instance"].longs_exams.all()]
initial["casecollection_exams"] = [t.pk for t in kwargs["instance"].casecollection_exams.all()]
initial["rapid_exams"] = [
t.pk for t in kwargs["instance"].rapid_exams.all()
]
initial["longs_exams"] = [
t.pk for t in kwargs["instance"].longs_exams.all()
]
initial["casecollection_exams"] = [
t.pk for t in kwargs["instance"].casecollection_exams.all()
]
ModelForm.__init__(self, *args, **kwargs)
@@ -155,12 +174,16 @@ class CidUserForm(ModelForm):
self.fields["physics_exams"] = ModelMultipleChoiceField(
required=False,
queryset=PhysicsExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(verbose_name="Physics Exams", is_stacked=False),
widget=FilteredSelectMultiple(
verbose_name="Physics Exams", is_stacked=False
),
)
self.fields["anatomy_exams"] = ModelMultipleChoiceField(
required=False,
queryset=AnatomyExam.objects.filter(archive=False),
widget=FilteredSelectMultiple(verbose_name="Anatomy Exams", is_stacked=False),
widget=FilteredSelectMultiple(
verbose_name="Anatomy Exams", is_stacked=False
),
)
self.fields["sba_exams"] = ModelMultipleChoiceField(
required=False,
@@ -180,7 +203,9 @@ class CidUserForm(ModelForm):
self.fields["casecollection_exams"] = ModelMultipleChoiceField(
required=False,
queryset=CaseCollection.objects.filter(archive=False),
widget=FilteredSelectMultiple(verbose_name="Case Collection", is_stacked=False),
widget=FilteredSelectMultiple(
verbose_name="Case Collection", is_stacked=False
),
)
def save(self, commit=True):
@@ -219,7 +244,7 @@ class CidUserForm(ModelForm):
self.save_m2m()
return instance
class Meta:
model = CidUser
fields = [
@@ -234,31 +259,42 @@ class CidUserForm(ModelForm):
"group",
]
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"]
class UserUserGroupModelChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return f"{obj.username} ({obj.userprofile.grade}) [{obj.email}]"
class UserUserGroupForm(ModelForm):
users = UserUserGroupModelChoiceField(
required=False,
queryset=User.objects.all(),
widget=FilteredSelectMultiple(verbose_name="Users", is_stacked=False),
)
class Meta:
model = UserUserGroup
fields = ["name", "archive", "users"]
#class UserForm(ModelForm):
# class UserForm(ModelForm):
# class Meta:
# model = User
# fields = ["first_name", "last_name", "email"]
#
#class UserProfileForm(ModelForm):
# class UserProfileForm(ModelForm):
# class Meta:
# model = UserProfile
# fields = ["supervisor_name", "supervisor_email", "registration_number", "peninsula_trainee"]
@@ -271,18 +307,25 @@ GRADE_CHOICES = (
("ST5", "ST5"),
)
class UserUserForm(Form):
username = EmailField(required=True, help_text="Username / email should be the same. Ideally this should be an nhs email.")
username = EmailField(
required=True,
help_text="Username / email should be the same. Ideally this should be an nhs email.",
)
first_name = CharField(max_length=255, required=True)
last_name = CharField(max_length=255, required=True)
grade = ModelChoiceField(UserGrades.objects.all(), required=False)
supervisor = ModelChoiceField(Supervisor.objects.all(), required=False) # Needs to be a user/object ref
supervisor = ModelChoiceField(
Supervisor.objects.all(), required=False
) # Needs to be a user/object ref
#
# class Meta:
#
# fields = ("username", "first_name", "last_name")
class SupervisorForm(ModelForm):
class Meta:
model = Supervisor
exclude = ("",)
exclude = ("",)