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

如何在Django通用ListView中获取URL传递的主键pk

Django ListView获取URL路径中pk的解决方案

Django所有基于类的视图(CBV)中,URL捕获的路径参数都会自动存入self.kwargs属性(字典格式,键为URL配置中定义的参数名),你这里直接通过self.kwargs['pk']即可拿到学生主键,无需切换为函数视图。

完整修改后的视图代码如下:

class CalendarView(LoginRequiredMixin, generic.ListView):
    model = Class
    template_name = 'leads/calendar.html'

    def get_queryset(self):
        # 获取URL路径中传递的学生主键
        student_pk = self.kwargs['pk']
        # 过滤仅返回该学生关联的Class数据,外键字段请替换为你实际模型中的字段名
        # 示例中假设Class模型关联学生的外键名为lead,和你模板中传的lead.pk对应
        return super().get_queryset().filter(lead_id=student_pk)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 若需要在模板中展示学生信息,可将学生实例传入上下文
        # context['current_student'] = Student.objects.get(pk=self.kwargs['pk'])

        # 原有日历逻辑保持不变
        d = get_date(self.request.GET.get('month', None))
        cal = Calendar(d.year, d.month)
        html_cal = cal.formatmonth(withyear=True)
        context['calendar'] = mark_safe(html_cal)
        context['prev_month'] = prev_month(d)
        context['next_month'] = next_month(d)
        return context

注意事项

  • 上述代码中filter(lead_id=student_pk)的字段名需要替换为你Class模型中实际关联学生的外键字段名,如果你用的是外键对象过滤,也可以写为filter(lead__pk=student_pk)
  • 建议增加权限校验逻辑,比如在get_queryset中额外增加和当前登录用户关联的过滤条件,避免用户手动修改URL参数越权查看其他学生的日历信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:48:03