feat: Implement supervisor trainee management features, including search, add, and remove functionalities

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Ross
2026-04-29 22:27:09 +01:00
parent f63f3b3687
commit 89c8cd565f
10 changed files with 500 additions and 82 deletions
+31
View File
@@ -835,6 +835,37 @@ class TraineeForm(Form):
class SupervisorForm(ModelForm):
# UserSearchWidget returns list-like values; this field normalises to a
# single selected user for the Supervisor.user OneToOne relation.
user = ModelChoiceField(
queryset=User.objects.all(),
required=False,
widget=UserSearchWidget(),
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
user_field = self.fields.get("user")
if user_field:
user_field.widget = UserSearchWidget(user_field)
def clean_user(self):
value = self.cleaned_data.get("user")
if isinstance(value, (list, tuple)):
value = value[0] if value else None
if value is None:
return None
if isinstance(value, User):
return value
try:
return User.objects.get(pk=value)
except (TypeError, ValueError, User.DoesNotExist):
raise ValidationError("Select a valid user.")
class Meta:
model = Supervisor
exclude = ("",)