Improved Model Admin views, student adds user for login

This commit is contained in:
2025-11-11 22:18:39 +01:00
parent 637d109a91
commit ea33bef9cd
10 changed files with 363 additions and 115 deletions

View File

@@ -0,0 +1,32 @@
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 import Student
@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()