31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
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()
|