from django.db.models.signals import post_save from django.dispatch import receiver from django.contrib.auth.models import User from django.contrib.auth.models import Group from .models.students import Student from .custom.defpassword import default_password # Create a Django user every time a new student is created @receiver(post_save, sender=Student) def create_user_for_student(sender: Student, student: Student, created, **kwargs): if created and not student.user: username = f"{student.name.lower()}.{student.surname.lower()}" # Avoid username conflict with progressive number base_username = username counter = 1 while User.objects.filter(username=username).exists(): username = f"{base_username}{counter}" counter += 1 # Create user user = User.objects.create_user( username=username, email=student.email, password=default_password(student=student) ) student_group, _ = Group.objects.get_or_create(name="StudentGroup") user.groups.add(student_group) student.user = user student.save()