Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
获取登录用户,同时在Django中使用UpdateView更新模型用户_Django_Django Views_Django Templates_Django Authentication_Django Users - Fatal编程技术网

获取登录用户,同时在Django中使用UpdateView更新模型用户

获取登录用户,同时在Django中使用UpdateView更新模型用户,django,django-views,django-templates,django-authentication,django-users,Django,Django Views,Django Templates,Django Authentication,Django Users,刚到Django这里,我正在建设我的第一个项目。 我正在使用Django身份验证,当用户登录时,我会在模板面板中显示使用 <li> <a style="color: wheat;" href="#"><i class="fi-torso"></i>{{user.full_name}}</a> &l

刚到Django这里,我正在建设我的第一个项目。 我正在使用Django身份验证,当用户登录时,我会在模板面板中显示使用

<li>
                                    
  <a style="color: wheat;" href="#"><i class="fi-torso"></i>{{user.full_name}}</a>
  <ul class="menu vertical" style="background-color:rgb(51,51,51); border-color: wheat;">
    <li><a href="{% url 'users_app:user-logout' %}">Cerrar Sesión</a></li>
  </ul>

</li>
  • 问题是,登录用户可以通过UpdateView修改其他用户的属性。因此,当我选择要更新的用户(context user now是要更新的用户)并访问Modify user template时,在我的面板中,我看到的不是登录的用户,而是正在修改的用户


    我如何区分这一点?我理解为什么会发生这种情况,但还没有找到解决方法。变量
    user
    是由一个名为
    django.contrib.auth.context\u processors.auth的处理器添加到上下文中的。还有一个上下文处理器
    django.template.context\u processors.request
    ,它将变量
    request
    添加到上下文中

    问题是您的
    UpdateView
    还将变量
    user
    添加到上下文中,以便使用该变量。如何解决这个问题?最简单的方法是始终使用
    request.user
    引用模板中的当前用户

    另一种解决方案是通过设置
    context\u object\u name
    ,简单地更改变量的名称
    UpdateView
    将添加到上下文中:

    class MyView(UpdateView):
        ...
        context_object_name = 'other_user' # any preferred name
        ...
    
    现在,在模板中,您将要更新的用户称为
    other\u user


    还有一种选择,即向模板添加自定义上下文处理器,该模板将添加具有不同名称的请求用户的变量(可能
    current\u user
    ),但对于这个简单的名称冲突问题,这将做太多工作。

    使用
    request.user
    而不是只添加
    user
    (也更说明这是当前用户)引用当前登录用户。默认情况下,上下文处理程序将请求和用户都添加到上下文中。回答非常好!非常感谢您正在工作:)