from django.conf import settings from django.contrib.auth.models import AbstractUser from django.core.validators import MinValueValidator, MaxValueValidator from django.db import models class User(AbstractUser): ROLE_CHOICES = [ ('STUDENT', 'Student'), ('ADMIN', 'Admin'), ] name = models.CharField(max_length=255, blank=True) email = models.EmailField(unique=True) role_type = models.CharField(max_length=20, choices=ROLE_CHOICES, default='STUDENT') created_at = models.DateTimeField(auto_now_add=True) USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username', 'name'] def __str__(self): return self.email class UserProfile(models.Model): user = models.OneToOneField( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='profile' ) degree = models.CharField(max_length=255, blank=True) semester = models.IntegerField( null=True, blank=True, validators=[MinValueValidator(1), MaxValueValidator(12)] ) interests = models.TextField(blank=True) bio = models.TextField(blank=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return f'Profile of {self.user.email}'