【问题标题】:Listing my tasks under my projects in Django在 Django 中的项目下列出我的任务
【发布时间】:2020-07-17 15:59:18
【问题描述】:

我是 Django 新手(和一般编程),可以通过一些可能非常简单但我想不通的帮助来获得帮助。

目前我正在 Django 中为我的投资组合开发一个项目管理器应用程序。

但我坚持创建不同项目及其任务的列表。

我想创建这样的东西:

项目_1

  1. 任务项目 1(项目_1)
  2. 任务项目 2(项目_1)

项目_2

  1. 任务项目 1(项目_2)
  2. 任务项目 2(项目_2)

项目_3

  1. 任务项目 1(项目_3)
  2. 任务项目 2(项目_3)
  3. (project_3 的)任务项 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)

项目.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]}..."

我得到的结果是:

项目_1

  1. 任务项目 1(项目_1)
  2. 任务项目 2(项目_1)

项目_2

  1. 任务项目 1(项目_1)
  2. 任务项目 2(项目_1)

项目_3

  1. 任务项目 1(项目_1)
  2. 任务项目 2(项目_1)

我知道问题是我使用了project = Project.objects.get(id=1),因此它只显示与项目一相关的任务。 而且我认为如果 id 与正确的项目 id 相关,这可能是解决方案。 我似乎不知道我是如何做到这一点的。或者我可能看错了方向。

欢迎任何帮助,提前感谢。

【问题讨论】:

    标签: python django project-management task-management


    【解决方案1】:

    您应该能够对项目中的任务使用反向查找。请参阅 django 文档的这一部分:https://docs.djangoproject.com/en/3.0/topics/db/queries/#following-relationships-backward

    您已经建立了从 Tasks 到 Project 的外键关系。所以一个项目有很多任务。您可以使用 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 %}
    
    

    希望这会有所帮助,如果有任何需要澄清的地方,请告诉我。

    【讨论】:

      猜你喜欢
      • 2010-09-21
      • 2016-11-08
      • 1970-01-01
      • 2011-09-13
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      相关资源
      最近更新 更多