我有一個類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