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

Django项目中仅展示登录用户所属项目的实现问题

解决Django视图中仅展示登录用户项目的问题

嘿,作为编程新手遇到这个问题很正常,我来帮你梳理清楚!

你遇到的报错Cannot query "Simone": Must be "Worker" instance,核心原因很明确:你的Project模型里的worker字段关联的是Worker模型,而不是直接关联User模型。你之前直接用request.user(这是个User实例)去过滤,Django自然会报错——它需要的是Worker对象,不是User对象。

因为你说不能修改模型,那我们就通过Django ORM的跨表查询来解决这个问题,具体步骤如下:

1. 理清关联关系

你的模型关联链是:
Project → Worker(外键) → User(Worker模型里的worker字段)

要找到当前登录用户对应的所有项目,需要通过Worker模型作为中间层,关联到User。

2. 修改视图中的查询语句

把原来的:

user_projects = Project.objects.filter(worker=user).order_by('deadline')

改成:

user_projects = Project.objects.filter(worker__worker=user).order_by('deadline')

这里的双下划线__是Django ORM的专属语法,用来表示跨关联表查询:

  • 第一个worker是Project模型里的外键字段(指向Worker)
  • 第二个worker是Worker模型里关联User的字段

这样就能准确筛选出当前登录用户作为工人的所有项目了。

3. 完整修改后的视图代码

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Project

@login_required(login_url='/accounts/login/')
def projectsWorkers(request):
    user = request.user
    # 这里修改了filter的条件,通过Worker关联到User
    user_projects = Project.objects.filter(worker__worker=user).order_by('deadline')
    template = 'projects/projects-worker-home.html'
    return render(request, template, {'user_projects': user_projects, 'user': user})

额外小提示

如果之后需要做负责人的项目视图,逻辑是完全一样的,只需要把查询条件改成:

user_projects = Project.objects.filter(responsable__responsable=user).order_by('deadline')

另外要注意:确保每个登录用户都有对应的Worker(或Responsable)实例,如果某个用户没有创建对应的Worker记录,查询结果会是空的哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:52:40