确认电子邮件以及如何访问和更改用户的个人资料字段?

时间:2017-12-23 05:53:38

标签: python django

我正在关注教程,一切正常,但能够访问用户的个人资料字段,到目前为止我能够设置' is_active'在用户模型上标记,输入&user; .profile.email_confirmed'真的没有变化,所以任何关于我做错了什么的想法。

models.py

class Profile(models.Model):
    # relations
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    email_confirmed = models.BooleanField(default=False)

tokens.py

class AccountActivationTokenGenerator(PasswordResetTokenGenerator):
    def _make_hash_value(self, user, timestamp):
        return (
            six.text_type(user.pk) + six.text_type(timestamp) +
            six.text_type(user.profile.email_confirmed)
        )


account_activation_token = AccountActivationTokenGenerator()

urls.py

url(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]
                                     {1,13}-[0-9A-Za-z]{1,20})/$',
                                 views.activate, name='activate'),

views.py

def activate(request, uidb64, token):
    try:
        uid = force_text(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
    except (TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None

    if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        user.profile.email_confirmed = True
        user.save()
        login(request, user)
        return redirect('home')
    else:
        return render(request, 'account_activation_invalid.html')

1 个答案:

答案 0 :(得分:1)

尝试插入

user.profile.save()

之前

user.save()

呼叫。

从底层数据库角度查看内容可能会有所帮助。通常,关系存储为表示外键的整数到另一个数据库表中的条目。

因此当你执行

user.save()

您正在写入is_active现在设置为True的数据库,但用户配置文件仍然是与之前相同的整数值,因为您没有更改用户拥有的配置文件对象。据我所知,Django并没有试图找出配置文件对象也已被更改。