You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:10:34