StudE-Backend/stude/accounts/models.py

117 lines
4.1 KiB
Python
Raw Normal View History

from django.contrib.auth.models import AbstractUser
from django.core.exceptions import ValidationError
from django.utils.text import slugify
2023-06-26 19:10:04 +08:00
from django.db import models
2023-06-27 14:38:07 +08:00
from courses.models import Course
from year_levels.models import Year_Level
2023-06-27 15:48:43 +08:00
from semesters.models import Semester
from django.db.models.signals import post_migrate
from django.dispatch import receiver
2023-06-27 21:12:03 +08:00
import os
2023-07-27 16:00:24 +08:00
from uuid import uuid4
from django.utils.deconstruct import deconstructible
def validate_student_id(value):
try:
int(value)
except (ValueError, TypeError):
raise ValidationError('Student ID must be a valid integer.')
2023-06-26 19:10:04 +08:00
class CustomUser(AbstractUser):
2023-07-27 16:00:24 +08:00
# Function for avatar uploads
2023-06-26 22:06:05 +08:00
def _get_upload_to(instance, filename):
base_filename, file_extension = os.path.splitext(filename)
# Get the student ID number
2023-07-27 16:00:24 +08:00
ext = base_filename.split('.')[-1]
filename = '{}.{}'.format(uuid4().hex, ext)
2023-06-26 22:06:05 +08:00
student_id = str(instance.student_id_number)
2023-07-27 16:00:24 +08:00
new_filename = f"{student_id}_{filename}_{file_extension}"
2023-06-26 22:06:05 +08:00
return os.path.join('avatars', new_filename)
2023-07-27 16:00:24 +08:00
# Delete old avatar file if new one is uploaded
def save(self, *args, **kwargs):
try:
# is the object in the database yet?
this = CustomUser.objects.get(id=self.id)
if this.avatar != self.avatar:
this.avatar.delete(save=False)
except:
pass # when new photo then we do nothing, normal case
super(CustomUser, self).save(*args, **kwargs)
2023-06-26 20:36:58 +08:00
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
# Email inherited from base user class
# Username inherited from base user class
# Password inherited from base user class
# is_admin inherited from base user class
is_active = models.BooleanField(default=False)
is_student = models.BooleanField(default=True)
2023-06-26 20:36:58 +08:00
is_studying = models.BooleanField(default=False)
irregular = models.BooleanField(default=False)
student_id_number = models.CharField(
max_length=16, validators=[validate_student_id], null=False)
avatar = models.ImageField(upload_to=_get_upload_to, null=True)
2023-06-27 14:38:07 +08:00
course = models.ForeignKey(
Course,
on_delete=models.SET_NULL,
2023-06-27 14:38:07 +08:00
null=True
)
2023-06-27 15:48:43 +08:00
year_level = models.ForeignKey(
Year_Level,
on_delete=models.SET_NULL,
null=True
)
2023-06-27 15:48:43 +08:00
semester = models.ForeignKey(
Semester,
on_delete=models.SET_NULL,
2023-06-27 15:48:43 +08:00
null=True
)
subjects = models.ManyToManyField('subjects.Subject')
@property
def full_name(self):
return f"{self.first_name} {self.last_name}"
2023-06-26 19:45:58 +08:00
pass
@receiver(post_migrate)
def create_superuser(sender, **kwargs):
if sender.name == 'accounts':
User = CustomUser
username = os.getenv('DJANGO_ADMIN_USERNAME')
email = os.getenv('DJANGO_ADMIN_EMAIL')
password = os.getenv('DJANGO_ADMIN_PASSWORD')
if not User.objects.filter(username=username).exists():
# Create the superuser with is_active set to False
superuser = User.objects.create_superuser(
username=username, email=email, password=password)
# Activate the superuser
superuser.is_active = True
superuser.save()
User = CustomUser
username = 'keannu125'
email = os.getenv('DJANGO_ADMIN_EMAIL')
password = os.getenv('DJANGO_ADMIN_PASSWORD')
student_id_number = '2020300490'
first_name = 'Keannu'
last_name = 'Bernasol'
# course = 'Bachelor of Science in Information Technology'
# year_level = '1st Year'
# semester = '1st Semester'
if not User.objects.filter(username=username).exists():
# Create the superuser with is_active set to False
user = User.objects.create_user(
username=username, email=email, password=password, first_name=first_name, last_name=last_name, student_id_number=student_id_number)
# Activate the superuser
user.is_active = True
user.save()