Added instructor model, admin and basic actions
This commit is contained in:
99
cntmanage/flightslot/models/instructors.py
Normal file
99
cntmanage/flightslot/models/instructors.py
Normal file
@@ -0,0 +1,99 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User, Group
|
||||
|
||||
from phonenumber_field import modelfields
|
||||
|
||||
from ..models.missions import MissionProfile
|
||||
from ..models.aircrafts import Aircraft
|
||||
|
||||
class Instructor(models.Model):
|
||||
id = models.AutoField(
|
||||
primary_key=True
|
||||
)
|
||||
|
||||
email = models.EmailField(
|
||||
null=False,
|
||||
db_index=True
|
||||
)
|
||||
|
||||
phone = modelfields.PhoneNumberField(
|
||||
null=True,
|
||||
unique=True
|
||||
)
|
||||
|
||||
name = models.CharField(
|
||||
null=False,
|
||||
blank=False,
|
||||
max_length=32
|
||||
)
|
||||
|
||||
surname = models.CharField(
|
||||
null=False,
|
||||
blank=False,
|
||||
max_length=32
|
||||
)
|
||||
|
||||
active = models.BooleanField(
|
||||
null=False,
|
||||
default=True
|
||||
)
|
||||
|
||||
aircrafts = models.ManyToManyField(
|
||||
Aircraft
|
||||
)
|
||||
|
||||
missions = models.ManyToManyField(
|
||||
MissionProfile
|
||||
)
|
||||
|
||||
user = models.OneToOneField(
|
||||
User,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
|
||||
def default_password(self) -> str: # Maximum 4 digits for passowrd
|
||||
if self.pk:
|
||||
return f"{self.name.lower()[0]}{self.surname.lower()}{self.id % 10000}"
|
||||
else:
|
||||
return ""
|
||||
|
||||
def default_username(self) -> str:
|
||||
if self.pk and self.user:
|
||||
return self.user.username
|
||||
else:
|
||||
return ""
|
||||
|
||||
# Override save method to add user for login upon Student creation
|
||||
def save(self, *args, **kwargs):
|
||||
creating: bool = self.pk is None
|
||||
super().save(*args, **kwargs)
|
||||
if creating and not self.user:
|
||||
username: str = f"{self.name.lower()}.{self.surname.lower()}"
|
||||
# Avoid username conflict with progressive number
|
||||
base_username = username
|
||||
counter: int = 1
|
||||
while User.objects.filter(username=username).exists():
|
||||
username = f"{base_username}{counter}"
|
||||
counter += 1
|
||||
# Create user
|
||||
user: User = User.objects.create_user(
|
||||
first_name=self.name.capitalize(),
|
||||
last_name=self.surname.capitalize(),
|
||||
username=username,
|
||||
email=self.email,
|
||||
password=self.default_password(),
|
||||
is_staff=True # allows access to admin page
|
||||
)
|
||||
|
||||
instructor_group, _ = Group.objects.get_or_create(name="InstructorGroup")
|
||||
user.groups.add(instructor_group)
|
||||
self.user = user
|
||||
self.save()
|
||||
|
||||
def __str__(self):
|
||||
if self.pk:
|
||||
return f"{self.surname} {self.name[0]}."
|
||||
else:
|
||||
return "New Instructor"
|
||||
Reference in New Issue
Block a user