我有一个类BaseUser
和一个类RegisteredUser
(AbstractBaseUser
是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(),因为RegisteredUser
是BaseUser
的子类,而不是相反。你知道吗
不能。您已将关系定义为BaseUser。听起来像是发送欢迎电子邮件应该在RegisteredUser上,因为你注册了,你会收到一封欢迎电子邮件。我建议当用户临时注册时,他们不是注册用户。为什么不让一个类TemporaryUser,它有一个方法send\u temp\u welcome\u email,并让您的代码执行这个操作呢
您是否尝试过在BaseUser中定义
send_welcome_email()
(如果您在那里拥有所需的一切)并在RegisteredUser中定义调用super().send_welcome_email()
的相同方法?你知道吗我不明白哪个代码是第三部分,因为您有您的BaseUser,并且您提到RegisteredUser是第三部分,但它是从您的BaseUser继承的。你知道吗
相关问题 更多 >
编程相关推荐