Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python view.py中使用的Django布尔字段_Python_Django - Fatal编程技术网

Python view.py中使用的Django布尔字段

Python view.py中使用的Django布尔字段,python,django,Python,Django,我正在尝试添加一个新用户在初次登录时需要更新其密码的功能。我在配置文件模型中添加了一个隐藏的布尔字段,其中default=True models.py class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) force_password_change = models.BooleanField(default=True) 但是,当尝试在myviews

我正在尝试添加一个新用户在初次登录时需要更新其密码的功能。我在配置文件模型中添加了一个隐藏的布尔字段,其中default=True

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    force_password_change = models.BooleanField(default=True)
但是,当尝试在myviews.py中使用force\u password\u 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\u PROFILE\u MODULE='start.UserProfile'
,所以这似乎不是问题。

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

您忘记了与受尊敬的用户一起创建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…)

抱歉,我在发布前更改了一些内容。我将如何着手修复当前的错误?我在django admin page users表中有一个用户。创建用户时,您是否专门使用user对象创建了UserProfile。我通过django附带的admin page创建了我的用户。我正在使用UserProfile向其中添加字段。您需要在创建用户对象时为管理员站点编写一个post_save方法。看这条线嘿,谢谢你!我刚刚添加了create_user_配置文件代码。这个问题似乎已经解决了。谢谢。请发表评论并欢迎。