from django.contrib.auth.models import AbstractUser from django.db import models class CustomUser(AbstractUser): email = models.EmailField(unique=True) phone = models.CharField(max_length=20, blank=True) USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username'] @property def role(self): roles = [] if hasattr(self, 'studentprofile'): roles.append("student") if hasattr(self, 'instructorprofile'): roles.append("instructor") if hasattr(self, 'adminprofile'): roles.append("admin") return roles def save(self, *args, **kwargs): if self.email: self.email = self.email.lower().strip() super().save(*args, **kwargs) class Meta: verbose_name = "บัญชีผู้ใช้งาน" verbose_name_plural = "บัญชีผู้ใช้งาน" def __str__(self): return self.email class BaseRoleProfile(models.Model): user = models.OneToOneField( CustomUser, on_delete=models.CASCADE, ) is_active = models.BooleanField(default=True) class Meta: abstract = True class StudentProfile(BaseRoleProfile): interests = models.TextField(blank=True) class Meta: verbose_name = "ผู้เรียน" verbose_name_plural = "ผู้เรียน" class InstructorProfile(BaseRoleProfile): bio = models.TextField(blank=True) expertise = models.CharField(max_length=200, blank=True) is_verified = models.BooleanField(default=False) class Meta: verbose_name = "ผู้สอน" verbose_name_plural = "ผู้สอน" def __str__(self): return f"Instructor: {self.user.email}" class AdminProfile(BaseRoleProfile): is_super = models.BooleanField(default=False) class Meta: verbose_name = "ผู้ดูแลระบบ" verbose_name_plural = "ผู้ดูแลระบบ"