我有一个类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
实例?为了检索其RegisteredUser
实例,是否需要以用户ID为键在数据库上进行另一次查找?还是有另一种方法?我知道我不能使用super(),因为
RegisteredUser
是BaseUser
的子类,而不是相反。 最佳答案
你不能您已经定义了与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()
关于python - python/django:调用子类方法的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33179199/