我尝试在他们所属的项目的上下文中获取任务。使用简单的Project.objects.all(),我得到了我想要的东西。如何以最佳方式过滤此查询集?
型号:
class Project(models.Model):
projectname_text = models.CharField('Projectname', unique=True, max_length=200)
class Task(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE,
related_name='tasks')
author = models.ForeignKey(User, null=True, blank=True, related_name='author')
editor = models.ForeignKey(User, null=True, blank=True, related_name='editor')
我尝试使用Q,但结果看起来它包含太多项目甚至是request.user错误的项目。使用Q的MAybe在这里是错误的方法吗?
在视图中查询:
project_list = Project.objects.filter(Q(tasks__author=request.user) |
Q(tasks__editor=request.user))
模板:
{% for project in project_list %}
html
{% for task in project.tasks.all %}
html
{% endfor %}
{% endfor %}
答案 0 :(得分:0)
首先,您的查询条件有误。 author
和editor
位于模型Task
而非Project
上,因此您应该这样做:
projects = Project.objects.filter(Q(tasks__author=request.user) |
Q(tasks__editor=request.user))
其次,永远不要使用list
作为变量名,因为它会覆盖默认的python数据结构list
,因此您不能再使用list()
在变量后创建列表声明。