我正在关注教程,一切正常,但能够访问用户的个人资料字段,到目前为止我能够设置' is_active'在用户模型上标记,输入&user; .profile.email_confirmed'真的没有变化,所以任何关于我做错了什么的想法。
class Profile(models.Model):
# relations
user = models.OneToOneField(User, on_delete=models.CASCADE)
email_confirmed = models.BooleanField(default=False)
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()
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'),
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')
答案 0 :(得分:1)
尝试插入
user.profile.save()
之前
user.save()
呼叫。
从底层数据库角度查看内容可能会有所帮助。通常,关系存储为表示外键的整数到另一个数据库表中的条目。
因此当你执行
时user.save()
您正在写入is_active
现在设置为True的数据库,但用户配置文件仍然是与之前相同的整数值,因为您没有更改用户拥有的配置文件对象。据我所知,Django并没有试图找出配置文件对象也已被更改。