获取登录用户,同时在Django中使用UpdateView更新模型用户
刚到Django这里,我正在建设我的第一个项目。 我正在使用Django身份验证,当用户登录时,我会在模板面板中显示使用获取登录用户,同时在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
<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
(也更说明这是当前用户)引用当前登录用户。默认情况下,上下文处理程序将请求和用户都添加到上下文中。回答非常好!非常感谢您正在工作:)