gpt4 book ai didi

python /Django : correct way of calling subclass method

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:45 25 4
gpt4 key购买 nike

我有一个类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)

因此,用户有一个与之关联的登录代码。它需要位于 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(),因为 RegisteredUserBaseUser 的子类,而不是相反。

最佳答案

你不能。您已定义与 BaseUser 的关系。听起来 send_welcome_email 应该位于 RegisteredUser 上,因为您已注册,并且您会收到一封欢迎电子邮件。我建议当用户临时注册时,他们就不是注册用户。为什么不使用一个具有 send_temp_welcome_email 方法的 TemporaryUser 类,并让您的代码执行此操作

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()

关于 python /Django : correct way of calling subclass method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33179199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com