Django问题:如何在视图中获取模型字段值?
解决Django视图中根据模型实例字段动态生成面包屑的问题
你的代码存在两个核心问题:
status = Project.status获取的是模型的字段定义对象,不是当前请求对应的具体Project实例的状态值,所以和字符串"completed"永远不相等。- 类定义阶段的
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
相关产品推荐
相关产品推荐

