【发布时间】:2017-12-15 23:43:02
【问题描述】:
我正在尝试向新用户在首次登录时需要更新他/她的密码的地方添加一项功能。我在我的 Profile 模型中添加了一个隐藏的 BooleanField,其中 default = True。
models.py
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
force_password_change = models.BooleanField(default=True)
但是,当尝试在我的 views.py 中使用 force_password_change 时,它永远不会返回我在 django 管理页面中设置的正确值。
views.py
if request.method == 'POST':
...
user = authenticate(request, username=username, password=password)
changepass = UserProfile.objects.get(user=request.user)
if user:
if changepass.force_password_change == True:
changepass.force_password_change = False
changepass.save()
return HttpResponseRedirect('/login/register/')
elif changepass.force_password_change == False:
if user.is_active:
login(request, user)
return HttpResponseRedirect('/main/')
else:
return HttpResponse("Your account has been disabled.")
它目前给我这个错误
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\django\core\handlers\exception.py", line
41, in inner
response = get_response(request)
File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 187,
in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 185,
in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "start\views.py", line 20, in user_login
changepass = UserProfile.objects.get(user=request.user)
File "C:\Python34\lib\site-packages\django\db\models\manager.py", line 85,
in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Python34\lib\site-packages\django\db\models\query.py", line 380, in
get
self.model._meta.object_name
start.models.DoesNotExist: UserProfile matching query does not exist.
我还在我的 settings.py 中添加了AUTH_PROFILE_MODULE = 'start.UserProfile',所以这似乎不是问题。
【问题讨论】:
-
当您创建用户时,您是否专门使用用户对象创建了 UserProfile。
-
我通过 django 自带的管理页面创建了我的用户。我正在使用 UserProfile 向其中添加字段。
-
您需要为创建用户对象的管理站点编写一个 post_save 方法。看到这个线程stackoverflow.com/questions/11488974/…
-
嘿,谢谢!我刚刚添加了 create_user_profile 代码。好像那个问题就没有了。谢谢。
-
点赞评论并欢迎。