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

如何在Django的utils.py中获取当前登录用户request.user的budget_id字段

实现方案

Django的request对象仅在视图层的请求生命周期内可直接获取,utils.py模块默认无权限直接访问该对象,你可以通过显式传参的方式实现需求,以下是两种可行方案:


方案1:将用户对象传入Calendar类初始化(推荐)

适合整个Calendar类的多个方法都需要用到用户信息的场景:

第一步:修改utils.py中的Calendar类

class Calendar(HTMLCalendar):
    # 新增user参数,实例化时传入当前登录用户
    def __init__(self, year=None, month=None, user=None):
        self.year = year
        self.month = month
        self.user = user # 将用户对象存储为实例属性
        super(Calendar, self).__init__()


    def formatday(self, day, events):
        # 直接从实例属性读取budget_id
        budget_id = self.user.budget_id
        # 剩余业务逻辑...

第二步:在views.py中实例化Calendar时传参

# 你的视图函数中实例化Calendar的位置
def your_view_func(request):
    # 把request.user作为参数传入
    cal = Calendar(year=2024, month=10, user=request.user)
    # 后续调用formatday等方法的逻辑...

方案2:调用formatday时直接传参

如果仅在formatday方法中需要用到用户信息,可以只修改该方法的参数:

第一步:修改utils.py中的formatday方法

class Calendar(HTMLCalendar):
    def __init__(self, year=None, month=None,):
        self.year = year
        self.month = month
        super(Calendar, self).__init__()

    # 新增user参数
    def formatday(self, day, events, user):
        budget_id = user.budget_id
        # 剩余业务逻辑...

第二步:在调用formatday时传入当前用户

# 调用formatday的位置,传入request.user
cal.formatday(day=15, events=your_event_list, user=request.user)

注意:不建议使用线程本地存储(threadlocal)的方式全局获取request对象,该方案存在线程安全风险,多worker部署时容易出现用户数据串扰的问题,优先选择显式传参的方案更稳定可控。

内容的提问来源于stack exchange,提问作者LukarisPL Zapotoczny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:39:02