You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

83 lines
2.3 KiB

from django.contrib.auth.models import BaseUserManager
from django.db.models import Manager
class UserManager(BaseUserManager):
def create_user(
self,
email: str = None,
fullname: str = None,
password: str = None,
**extra_fields
):
email = UserManager.normalize_email(email)
user = self.model(
email=email,
fullname=fullname,
**extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, fullname, password):
user = self.create_user(
email=email,
fullname=fullname,
password=password,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.is_active = True
user.user_type="super_admin"
user.save(using=self._db)
return user
def change_user_type(self, new_user_type):
# حذف گروه‌های فعلی
old_group_name = f"{self.user_type.capitalize()} Group"
old_group = Group.objects.filter(name=old_group_name).first()
if old_group:
self.groups.remove(old_group)
# تغییر نوع کاربر
self.user_type = new_user_type
# افزودن گروه جدید
new_group_name = f"{new_user_type.capitalize()} Group"
new_group, _ = Group.objects.get_or_create(name=new_group_name)
self.groups.add(new_group)
# ذخیره تغییرات
self.save()
class ProfessorUserManager(UserManager):
def get_queryset(self):
return super().get_queryset().filter(user_type="professor")
class ClientUserManager(UserManager):
def get_queryset(self):
return super().get_queryset().filter(user_type="client")
class AdminUserManager(UserManager):
def get_queryset(self):
return super().get_queryset().filter(user_type="admin")
class SuperAdminUserManager(UserManager):
def get_queryset(self):
return super().get_queryset().filter(user_type="super_admin")
class StudentUserManager(UserManager):
def get_queryset(self):
return super().get_queryset().filter(user_type="student")