我有一个班级BaseUser
和一个班级RegisteredUser
(AbstractBaseUser
是一个django班级)
class BaseUser(AbstractBaseUser):
#std properties of a base user
class RegisteredUser(BaseUser):
def send_welcome_email(self):
#send the email
可以邀请用户访问该平台,然后获取TempLogin:
class TempLogin(models.Model):
login_code: models.CharField(max_length=255, unique=True)
user: models.ForeignKey(BaseUser, unique=True)
因此用户具有与之关联的login_code。它需要在BaseUser上,因为支持其他用户类型。
然后,当用户使用她的代码到达平台时,我查找代码,并获得用户:
code = TemporaryLoginCode.objects.get(code=pk)
user = code.user
user.send_welcome_email()
最后一位是因为send_welcome_email()
位于RegisteredUser
,而不是BaseUser
。
我无法将send_welcome_email()
显式移动到RegisteredUser
(第三方代码)。
如何让user
成为RegisteredUser
个实例?我是否需要在数据库上执行另一次查找,并将用户ID作为密钥,以便检索其RegisteredUser
实例?或者还有另一种方式吗?
我知道我不能使用super(),因为RegisteredUser
是BaseUser
的子类,而不是相反。
答案 0 :(得分:1)
你做不到。您已经定义了与BaseUser的关系。听起来像send_welcome_email应该在RegisteredUser上,因为您已注册,并且您收到了欢迎电子邮件。我建议当用户暂时注册时,他们不是注册用户。为什么没有一个类TemporaryUser,它有一个方法send_temp_welcome_email,并让你的代码执行此操作
class TempUser(BaseUser):
def send_temp_welcome_email(self):
#send the tempemail
class TempLogin(models.Model):
login_code: models.CharField(max_length=255, unique=True)
user: models.ForeignKey(TempUser, unique=True)
code = TemporaryLoginCode.objects.get(code=pk)
user = code.user
user.send_temp_welcome_email()
答案 1 :(得分:0)
您是否尝试在BaseUser中定义send_welcome_email()
(如果您有所需的全部内容)并在RegisteredUser中调用super().send_welcome_email()
使用相同的方法?
我不知道哪个代码是第三部分,因为你有你的BaseUser并且你提到RegisteredUser是第三部分但是从你的BaseUser继承。