在 Django 中列出我的项目下的任务
Listing my tasks under my projects in Django
我是 Django(和一般编程)的新手,可以使用一些非常简单但我无法弄清楚的帮助。
目前我正在为我的作品集开发 Django 项目管理器应用程序。
但我一直坚持创建不同项目及其任务的列表。
我想创建这样的东西:
Project_1
- 任务项 1(共 project_1)
- 任务项目 2(共 project_1)
Project_2
- 任务项 1(共 project_2)
- 任务项 2(共 project_2)
Project_3
- 任务项 1(共 project_3)
- 任务项目 2(共 project_3)
- 任务项目 3(共 project_3)
目前我有:
view.py:
def project(request):
""" Show all Projects"""
projects = Project.objects.order_by('date_added')
project = Project.objects.get(id=1)
tasks = project.task_set.order_by('date_added')
context = {'projects': projects, 'tasks': tasks}
return render(request, 'tasks/project.html', context)
project.html
{% extends "tasks/base.html" %}
{% block content %}
<p>Projects</p>
<ul>
{% for project in projects %}
<li>{{project}}</li>
<ul>
{% for task in tasks %}
<li>{{task}}</li>
{% empty %}
<li>No tasks added </li>
{% endfor %}
</ul>
{% empty %}
<li>No projects have been added yet.</li>
{% endfor %}
</ul>
{% endblock content %}
models.py
class Project(models.Model):
"""A project the user is working on."""
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
"""Return a string representation of the model."""
return self.text
class Task(models.Model):
"""A task of a project to complete."""
project = models.ForeignKey(Project, on_delete=models.CASCADE)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'tasks'
def __str__(self):
"""Return a string representation of the model."""
if(len(self.text) < 50 ):
return f"{self.text}"
else:
return f"{self.text[:50]}..."
我得到的结果是:
Project_1
- 任务项 1(共 project_1)
- 任务项目 2(共 project_1)
Project_2
- 任务项 1(共 project_1)
- 任务项目 2(共 project_1)
Project_3
- 任务项 1(共 project_1)
- 任务项目 2(共 project_1)
我知道问题是我使用了 project = Project.objects.get(id=1)
,因此它只显示与项目一相关的任务。
而且我认为如果 id 与正确的项目 id 相关,这可能是解决方案。
我似乎不知道我是怎么做到的。或者我看错方向了。
欢迎任何帮助,提前致谢。
您应该能够对项目中的任务使用反向查找。请参阅 django 文档的这一部分:https://docs.djangoproject.com/en/3.0/topics/db/queries/#following-relationships-backward
您已经建立了从任务到项目的外键关系。所以一个项目有很多任务。您可以使用 project.task_set
引用使用反向查找来访问项目的任务。您也可以在模板中执行此操作。所以你的观点很简单:
def project(request):
""" Show all Projects"""
projects = Project.objects.order_by('date_added')
context = {'projects': projects}
return render(request, 'tasks/project.html', context)
模板中列出任务的部分应该是:
{% for task in project.task_set.all %}
<li>{{task}}</li>
{% empty %}
<li>No tasks added </li>
{% endfor %}
希望这对您有所帮助,如果有任何需要澄清的地方,请告诉我。
我是 Django(和一般编程)的新手,可以使用一些非常简单但我无法弄清楚的帮助。
目前我正在为我的作品集开发 Django 项目管理器应用程序。
但我一直坚持创建不同项目及其任务的列表。
我想创建这样的东西:
Project_1
- 任务项 1(共 project_1)
- 任务项目 2(共 project_1)
Project_2
- 任务项 1(共 project_2)
- 任务项 2(共 project_2)
Project_3
- 任务项 1(共 project_3)
- 任务项目 2(共 project_3)
- 任务项目 3(共 project_3)
目前我有:
view.py:
def project(request):
""" Show all Projects"""
projects = Project.objects.order_by('date_added')
project = Project.objects.get(id=1)
tasks = project.task_set.order_by('date_added')
context = {'projects': projects, 'tasks': tasks}
return render(request, 'tasks/project.html', context)
project.html
{% extends "tasks/base.html" %}
{% block content %}
<p>Projects</p>
<ul>
{% for project in projects %}
<li>{{project}}</li>
<ul>
{% for task in tasks %}
<li>{{task}}</li>
{% empty %}
<li>No tasks added </li>
{% endfor %}
</ul>
{% empty %}
<li>No projects have been added yet.</li>
{% endfor %}
</ul>
{% endblock content %}
models.py
class Project(models.Model):
"""A project the user is working on."""
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
"""Return a string representation of the model."""
return self.text
class Task(models.Model):
"""A task of a project to complete."""
project = models.ForeignKey(Project, on_delete=models.CASCADE)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'tasks'
def __str__(self):
"""Return a string representation of the model."""
if(len(self.text) < 50 ):
return f"{self.text}"
else:
return f"{self.text[:50]}..."
我得到的结果是:
Project_1
- 任务项 1(共 project_1)
- 任务项目 2(共 project_1)
Project_2
- 任务项 1(共 project_1)
- 任务项目 2(共 project_1)
Project_3
- 任务项 1(共 project_1)
- 任务项目 2(共 project_1)
我知道问题是我使用了 project = Project.objects.get(id=1)
,因此它只显示与项目一相关的任务。
而且我认为如果 id 与正确的项目 id 相关,这可能是解决方案。
我似乎不知道我是怎么做到的。或者我看错方向了。
欢迎任何帮助,提前致谢。
您应该能够对项目中的任务使用反向查找。请参阅 django 文档的这一部分:https://docs.djangoproject.com/en/3.0/topics/db/queries/#following-relationships-backward
您已经建立了从任务到项目的外键关系。所以一个项目有很多任务。您可以使用 project.task_set
引用使用反向查找来访问项目的任务。您也可以在模板中执行此操作。所以你的观点很简单:
def project(request):
""" Show all Projects"""
projects = Project.objects.order_by('date_added')
context = {'projects': projects}
return render(request, 'tasks/project.html', context)
模板中列出任务的部分应该是:
{% for task in project.task_set.all %}
<li>{{task}}</li>
{% empty %}
<li>No tasks added </li>
{% endfor %}
希望这对您有所帮助,如果有任何需要澄清的地方,请告诉我。