StudE-Backend/stude/accounts/models.py

67 lines
2.2 KiB
Python
Raw Normal View History

import time
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
import os
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-06-26 20:36:58 +08:00
YEAR_LEVELS = (
('1st', '1st year'),
('2nd', '2nd year'),
('3rd', '3rd year'),
('4th', '4th year'),
('5th', '5th Year'),
('Irreg', 'Irregular'),
)
SEMESTERS = (
('1st', '1st semester'),
('2nd', '2nd semester'),
)
2023-06-27 13:40:31 +08:00
COURSES = (
('BSIT', 'Bachelor of Science in Information Technology'),
('BSCS', 'Bachelor of Science in Computer Science'),
('BSCpE', 'Bachelor of Science in Computer Engineering'),
)
2023-06-26 22:06:05 +08:00
def _get_upload_to(instance, filename):
base_filename, file_extension = os.path.splitext(filename)
# Convert filename to a slug format
cleaned_filename = slugify(base_filename)
# Get the student ID number
student_id = str(instance.student_id_number)
new_filename = f"{student_id}_{cleaned_filename}{file_extension}"
return os.path.join('avatars', new_filename)
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_student = models.BooleanField(default=True)
2023-06-26 20:36:58 +08:00
is_studying = models.BooleanField(default=False)
is_banned = models.BooleanField(default=False)
student_id_number = models.CharField(
max_length=16, validators=[validate_student_id], null=False)
2023-06-26 20:36:58 +08:00
year_level = models.CharField(
max_length=50, choices=YEAR_LEVELS)
semester = models.CharField(
max_length=50, choices=SEMESTERS)
2023-06-27 13:40:31 +08:00
course = models.CharField(
max_length=50, choices=COURSES)
avatar = models.ImageField(upload_to=_get_upload_to, null=True)
@property
def full_name(self):
return f"{self.first_name} {self.last_name}"
2023-06-26 19:45:58 +08:00
pass