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

Django问题:如何在视图中获取模型字段值?

解决Django视图中根据模型实例字段动态生成面包屑的问题

你的代码存在两个核心问题:

  1. status = Project.status 获取的是模型的字段定义对象,不是当前请求对应的具体Project实例的状态值,所以和字符串"completed"永远不相等。
  2. 类定义阶段的if status == "completed"是在项目启动时执行的,此时还没有处理任何请求、没有加载具体的项目对象,这个判断逻辑完全无法根据请求动态调整。

修正后的代码

class CompanyProjectsDetailView(DetailBreadcrumbMixin, UpdateView):
    model = Project
    queryset = Project.objects.get_with_counted_notes_documents_todos()
    template_name = 'company_accounts/project_detail.html'
    context_object_name = 'project'
    form_class = ProjectStatusForm

    @cached_property
    def crumbs(self):
        # 获取当前请求对应的Project实例的状态值
        current_status = self.object.status
        
        # 基础面包屑列表
        crumbs_list = [
            ("projects", reverse("company_project:" + CompanyProjects.list_view_name)),
        ]
        
        # 根据状态添加对应面包屑
        if current_status == "completed":
            crumbs_list.append(
                ("completed projects", reverse("company_project:" + CompanyProjects.list_view_name))
            )
        
        # 可扩展其他状态的处理逻辑
        # elif current_status == "in_progress":
        #     crumbs_list.append(("ongoing projects", reverse(...)))
        
        return crumbs_list

关键说明

  • self.object是Django的SingleObjectMixin(UpdateView继承了该混入类)自动提供的属性,在视图处理请求时,会从你定义的queryset中加载当前对应的Project实例,直接通过它就能拿到真实的status字段值。
  • 将判断逻辑放到crumbs方法内部,确保每次请求都会根据当前项目的状态动态生成面包屑,而不是在类加载时就固定死逻辑。
  • 如果你的status字段用了Choices枚举类(比如IntegerChoices或TextChoices),要注意匹配枚举值,比如current_status == Project.Status.COMPLETED(具体名称根据你的模型定义调整)。

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

相关产品推荐
方舟 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