如何在Django URL中传递当前登录用户的PK?
解决Django ProfileUpdate视图自动获取当前登录用户的问题
1. 修改URL配置,移除PK参数
不需要在URL中手动传递PK,直接设置固定路径:
path('ProfileUpdate/', ProfileUpdate.as_view(), name="ProfileUpdate"),
2. 优化ProfileUpdate视图
- 移除
fields中的user字段(避免用户修改关联的User对象,破坏一对一关联逻辑) - 重写
get_object方法,自动匹配当前登录用户对应的Profile - 添加登录验证,确保只有登录用户能访问该页面
修改后的视图代码:
from django.contrib.auth.mixins import LoginRequiredMixin class ProfileUpdate(LoginRequiredMixin, UpdateView): model = Profile fields = [ "bio", "fav_music_genre", "fav_Book_genre", "fav_movie_genre", ] success_url = "/home/all" def get_object(self, queryset=None): # 自动获取当前登录用户关联的Profile对象 return self.request.user.profile
3. 更新模板中的链接
由于URL不再需要PK参数,直接调用URL名称即可:
<a href="{% url 'app:ProfileUpdate' %}">Change</a>
关键说明
- 重写
get_object后,视图会自动从当前请求的用户对象中获取关联的Profile,无需手动传递PK,彻底解决模板传参异常的问题 - 移除
user字段是必要的安全操作,因为Profile与User是一对一绑定关系,不应该允许用户修改这个关联 LoginRequiredMixin能拦截未登录用户的访问请求,避免非法编辑操作
内容的提问来源于stack exchange,提问作者Ayat Rahman
相关产品推荐
相关产品推荐

