python/Django:调用子类方法的正确方法

2024-09-29 17:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类BaseUser和一个类RegisteredUserAbstractBaseUser是django类)

class BaseUser(AbstractBaseUser):
    #std properties of a base user

class RegisteredUser(BaseUser):
    def send_welcome_email(self):
      #send the email

用户可以被邀请到平台,然后她会得到一个模板:

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实例?为了检索数据库的RegisteredUser实例,是否需要对数据库进行另一次查找(以用户id为键)?还是有别的办法?你知道吗

我知道我不能使用super(),因为RegisteredUserBaseUser的子类,而不是相反。你知道吗


Tags: 代码用户sendtruemodelsemailcode平台
2条回答

不能。您已将关系定义为BaseUser。听起来像是发送欢迎电子邮件应该在RegisteredUser上,因为你注册了,你会收到一封欢迎电子邮件。我建议当用户临时注册时,他们不是注册用户。为什么不让一个类TemporaryUser,它有一个方法send\u temp\u welcome\u 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() 

您是否尝试过在BaseUser中定义send_welcome_email()(如果您在那里拥有所需的一切)并在RegisteredUser中定义调用super().send_welcome_email()的相同方法?你知道吗

我不明白哪个代码是第三部分,因为您有您的BaseUser,并且您提到RegisteredUser是第三部分,但它是从您的BaseUser继承的。你知道吗

相关问题 更多 >

    热门问题