Normalize supervisor emails and add unique constraint for case-insensitive email uniqueness

This commit is contained in:
Ross
2025-11-03 10:30:45 +00:00
parent 7d079e0466
commit 66f9dadcc8
3 changed files with 80 additions and 2 deletions
+12 -2
View File
@@ -5,6 +5,8 @@ import os
from typing import Optional, Self, Tuple
from django.contrib.auth.mixins import LoginRequiredMixin
from django.db import models
from django.db.models import UniqueConstraint
from django.db.models.functions import Lower
from django.forms import ValidationError
from django.http import Http404, HttpRequest
from django.shortcuts import render
@@ -1859,8 +1861,16 @@ class Supervisor(models.Model):
return reverse("generic:supervisor_detail", kwargs={"pk": self.pk})
def clean(self):
self.email = self.email.strip()
self.name = self.name.strip()
if self.email:
# normalize email: strip and lowercase for consistency
self.email = self.email.strip().lower()
if self.name:
self.name = self.name.strip()
class Meta:
constraints = [
UniqueConstraint(Lower('email'), name='unique_supervisor_email_ci')
]
@receiver(post_save, sender=User)