Files
catops/cntmanage/flightslot/models/students.py
2025-11-18 23:28:50 +01:00

81 lines
2.0 KiB
Python

from django.db import models
from django.contrib.auth.models import User, Group
from ..models.courses import Course
class Student(models.Model):
id = models.AutoField(
primary_key=True
)
email = models.EmailField(
null=False,
db_index=True
)
phone = models.CharField(
null=True,
max_length=16
)
name = models.CharField(
null=False,
max_length=32
)
surname = models.CharField(
null=False,
max_length=32
)
course = models.ForeignKey(
Course,
on_delete=models.DO_NOTHING,
null=True
)
active = models.BooleanField(
null=False,
default=True
)
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
null=True,
blank=True
)
def default_password(self) -> str:
return f"{self.name.lower()[0]}{self.surname.lower()}{self.id}"
# Override save method to add user for login upon Student creation
def save(self, *args, **kwargs):
creating = self.pk is None
super().save(*args, **kwargs)
if creating and not self.user:
username = f"{self.name.lower()}.{self.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(
first_name=self.name,
last_name=self.surname,
username=username,
email=self.email,
password=self.default_password(),
is_staff=True
)
student_group, _ = Group.objects.get_or_create(name="StudentGroup")
user.groups.add(student_group)
self.user = user
self.save()
def __str__(self):
return f"{self.surname} {self.name[0]}. => {self.course}"