我有一个类BaseUser
和类RegisteredUser
的正确方法(AbstractBaseUser
是一个Django类)蟒蛇/ 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
实例?还是有另一种方式?
我知道我不能使用super(),因为RegisteredUser
是BaseUser
的子类,而不是其他方式。
为什么不把'TempLogin.user'的外键'RegisteredUser'? – mipadi
因为我不能(正如在描述中提到的那样),它是我必须支持的第三方代码。此外,邀请可以扩展到其他用户类型,这些用户类型不是RegisteredUser,但也是BaseUser的子类 – faboolous