from apps.account.models import User from apps.account.manager import * from django.contrib.auth.models import Group class ProfessorUser(User): objects = ProfessorUserManager() def save(self, *args, **kwargs): self.user_type = User.UserType.PROFESSOR super().save(*args, **kwargs) group, _ = Group.objects.get_or_create(name="Professor Group") self.groups.add(group) class Meta: proxy = True verbose_name = "Professor User" verbose_name_plural = "Professor Users" class ClientUser(User): objects = ClientUserManager() def save(self, *args, **kwargs): self.user_type = User.UserType.CLIENT super().save(*args, **kwargs) group, _ = Group.objects.get_or_create(name="Client Group") self.groups.add(group) class Meta: proxy = True verbose_name = 'user' verbose_name_plural = 'users' ordering = ('-id',) class AdminUser(User): objects = AdminUserManager() def save(self, *args, **kwargs): self.user_type = User.UserType.ADMIN super().save(*args, **kwargs) group, _ = Group.objects.get_or_create(name="Admin Group") self.groups.add(group) class Meta: proxy = True verbose_name = "Admin User" verbose_name_plural = "Admin Users" class SuperAdminUser(User): objects = SuperAdminUserManager() def save(self, *args, **kwargs): self.user_type = User.UserType.SUPER_ADMIN self.is_staff = True super().save(*args, **kwargs) class Meta: proxy = True verbose_name = "Super Admin User" verbose_name_plural = "Super Admin Users" class StudentUser(User): objects = StudentUserManager() def save(self, *args, **kwargs): self.user_type = User.UserType.STUDENT super().save(*args, **kwargs) group, _ = Group.objects.get_or_create(name="Student Group") self.groups.add(group) class Meta: proxy = True verbose_name = "Student User" verbose_name_plural = "Student Users"