Django非持久模型字段

时间:2015-01-22 16:45:17

标签: python django

我有一个Django模型,我为用户创建一个随机密码。

Manager.py:

class UserManager(BaseUserManager):
    def create_user(self, password=None):
        user = self.model()

        if password:
            user.set_password(password)
        else:
            user.set_password(user.generate_password())
        user.save()
        return user

然后我想在保存模型后用临时密码向用户发送电子邮件。

@receiver(post_save, sender=User)
def registration_email(sender, instance, created, **kwargs):
    if created:
        pass 

我的问题是密码是经过哈希处理的(这很好),因此我无法在post_save函数中执行以下操作... instance.password。那么有没有一种方法可以让非持久性模型字段进行读取(仅在第一次保存时),即instance.tempcleartext。或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

要按原样回答您的问题,您可以在设置密码之前获取密码参考:

self.temp_pw = user.generate_password()
user.set_password(self.temp_pw)

然后您可以将密码作为self.temp_pw访问,但它将是一个易失性属性,而不是保存到数据库的属性。

但是,我强烈建议不要这样做,特别是不要通过电子邮件发送密码。提供密码重置功能,IMO要好得多。