我是 Django 的新手(和一般的编程),可以使用一些可能非常简单的帮助,但我无法弄清楚。
目前我正在为我的投资组合在 Django 中开发一个项目管理器应用程序。
但我坚持创建不同项目及其任务的列表。
我想创建这样的东西:
项目_1
- 任务项目 1(project_1)
- 任务项目 2(project_1)
项目_2
- 任务项目 1(project_2)
- 任务项目 2(project_2)
项目_3
- 任务项目 1(project_3)
- 任务项目 2(project_3)
- 任务项目 3(project_3)
目前我有以下内容:
视图.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)
项目.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 %}
模型.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]}..."
我得到的结果是:
项目_1
- 任务项目 1(project_1)
- 任务项目 2(project_1)
项目_2
- 任务项目 1(project_1)
- 任务项目 2(project_1)
项目_3
- 任务项目 1(project_1)
- 任务项目 2(project_1)
我知道问题是我使用project = Project.objects.get(id=1)
的,因此它只显示与项目一相关的任务。而且我认为如果 id 与正确的项目 id 相关,这可能是解决方案。我似乎不知道我是如何做到这一点的。或者我可能看错了方向。
欢迎任何帮助,提前感谢。