Improved Model Admin views, student adds user for login
This commit is contained in:
32
techdb/flightslot/signals.py
Normal file
32
techdb/flightslot/signals.py
Normal 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()
|
||||
Reference in New Issue
Block a user