【问题标题】:Django Boolean Field used in view.pyview.py 中使用的 Django 布尔字段
【发布时间】: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 代码。好像那个问题就没有了。谢谢。
  • 点赞评论并欢迎。

标签: python django


【解决方案1】:

您忘记与受人尊敬的用户创建 UserProfile

from django.db.models.signals import post_save
from models import UserProfile
from django.contrib.auth.models import User

def register(request):
    if request.method == 'POST':
        uf = UserForm(request.POST, prefix='user')
        upf = UserProfileForm(request.POST, prefix='userprofile')
        if uf.is_valid() and upf.is_valid():
            user = uf.save()
            userprofile = upf.save(commit=False)
            userprofile.user = user
            userprofile.save() # Are you missing this line ??
            return django.http.HttpResponseRedirect(…something…)

【讨论】:

    【解决方案2】:

    这与布尔字段无关。该错误告诉您您的特定用户在 UserProfile 表中没有相关条目。

    【讨论】:

    • 抱歉,我在发布之前更改了一些内容。我将如何解决我当前的错误?我在 django 管理页面用户表中有用户。
    猜你喜欢
    • 2018-11-23
    • 2018-11-20
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2014-05-07
    相关资源
    最近更新 更多