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 # Create a Django user every time a new student is created @receiver(post_save, sender=Student) def create_user_for_student(sender: Student, instance: Student, created, **kwargs): if created and not instance.user: print("_____ SAVING USER _____") username = f"{instance.name.lower()}.{instance.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 # Generate standard password for every student password = f"{instance.name.lower()[0]}{instance.surname.lower()}{instance.id}" # Create user user = User.objects.create_user( username=username, email=instance.email, password=password ) student_group, _ = Group.objects.get_or_create(name="StudentGroup") user.groups.add(student_group) print(f"User: {user.username}\tPassword: {password}") instance.user = user instance.save()