所以我正在设置一个具有 3 种类型的用户管理员、客户和代理的应用程序 我的模型设置是这样的
class UserManager(BaseUserManager):
def create_user(self,email,name,password=None):
if not email:
raise ValueError('Users must have an email')
user = self.model(
email=self.normalize_email(email),name=name,)
user.set_password(password)
try:
user.save(using=self._db)
except IntegrityError:
raise IntegrityError('A user already uses this email')
return user
def create_superuser(self,password=None):
user = self.create_user(email,password=password)
user.is_active = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class User(AbstractBaseUser,PermissionsMixin):
class Types(models.TextChoices):
COSTUMER = "CUSTOMER","Customer"
AGENT = "AGENT","Agent"
type = models.CharField(_('Type'),max_length=50,choices=Types.choices,default=Types.CUSTOMER)
email = models.EmailField(_('Email of the user'),unique=True)
name = models.CharField(_('Name of the user'),max_length=100)
phone_number = PhoneNumberField(_('Phone number of the user'),blank=True,null=True,unique=True)
date_joined = models.DateField(_('Date joined'),auto_now_add=True)
last_login = models.DateTimeField(_('last login'),null=True)
is_superuser = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
objects = UserManager()
username_FIELD = 'email'
REQUIRED_FIELDS = ['name']
def __str__(self):
return self.email
class CustomerManager(models.Manager):
def get_queryset(self,*args,**kwargs):
return super().get_queryset(*args **kwargs).filter(type=User.Types.CUSTOMER)
class AgentManager(models.Manager):
def get_queryset(self,**kwargs):
return super().get_queryset(*args **kwargs).filter(type=User.Types.AGENT)
class Customer(User):
'''proxy class for registering customer'''
objects = CustomerManager()
class Meta:
proxy = True
def save(self,**kwargs):
if not self.pk:
self.type = User.Types.CUSTOMER
return super().save(*args,**kwargs)
class Agent(User):
'''proxy class for registering Agent'''
objects = AgentManager()
class Meta:
proxy = True
def save(self,**kwargs):
if not self.pk:
self.type = User.Types.AGENT
return super().save(*args,**kwargs)
我是 Django 的超级新手,我在 Django 和 Daniel Roy Greenfields YouTube 频道的两份独家新闻中看到了这种方法
我不知道如何将其序列化,以便我在前端有两个链接用于注册,一个用于客户,另一个用于代理
提前致谢