如何构建Django QuerySet,以显示分组的所有相关对象并在渲染模板中显示

发布于 2025-02-13 01:22:43 字数 2056 浏览 1 评论 0原文

实现:将数据显示为例如bellow的模板:

PLan 1: ABC
 - General Objective 1
     - Sub-Objective-1
       - Task 1
       - Task 2
     - Sub-Objective-2
       - Task 1
PLan 2: ZZZ
 - General Objetivo General 1
     - Sub-Objetivo-1
       - Tarea 1
PLan 3: DDD
 - General Objetivo General 1
     - Sub-Objetivo-1
       - Tarea 1
     - Sub-Objetivo-2
       - Tarea 1

这意味着:一个计划可以具有许多一般目标,并且该一般目标可以具有多个子目标,并且其每个目标都可以具有一个或几个任务。

我的实际模型和所有关系:

class PlanObjective(models.Model):
    actionplan = models.ForeignKey(ActionPlan, on_delete=models.CASCADE)
    center = models.ForeignKey(Center, on_delete=models.CASCADE)
    centerobjective = models.ForeignKey(CenterObjective, null=True, on_delete=models.SET_NULL)
    description = models.TextField(max_length=250, null=False, default='')

class PlanSubObjective (models.Model):
    actionplan = models.ForeignKey(ActionPlan, on_delete=models.CASCADE)
    center = models.ForeignKey(Center, on_delete=models.CASCADE)
    planobjective = models.ForeignKey(PlanObjective, on_delete=models.CASCADE)
    description = models.TextField(max_length=250, null=False, default='')


class PlanSubObjectiveTask (models.Model):
    actionplan = models.ForeignKey(ActionPlan, on_delete=models.CASCADE)
    center = models.ForeignKey(Center, on_delete=models.CASCADE)
    planobjective = models.ForeignKey(PlanObjective, on_delete=models.CASCADE)
    plansubobjective = models.ForeignKey(PlanSubObjective, on_delete=models.CASCADE)
    is_complete = models.CharField(max_length=2, null=True, blank=True, default='0')

这是我的实际查询:

plans = PlanSubObjectiveTask.objects.filter(period=period).select_related(
        'plansubobjective', 'planobjective', 'actionplan')

我正在阅读以下文档: https://docs.djangoproject.com/ /模板/内置/#重组但结果不是预期的。

如果您认为存在的最佳方法是完全欢迎使用QuerySet。

我真的需要帮助来完成此任务。 提前致谢。

Achieve: Show the data into the template as example bellow:

PLan 1: ABC
 - General Objective 1
     - Sub-Objective-1
       - Task 1
       - Task 2
     - Sub-Objective-2
       - Task 1
PLan 2: ZZZ
 - General Objetivo General 1
     - Sub-Objetivo-1
       - Tarea 1
PLan 3: DDD
 - General Objetivo General 1
     - Sub-Objetivo-1
       - Tarea 1
     - Sub-Objetivo-2
       - Tarea 1

This means that: A plan can have many general objectives and this general objective can have several sub-objectives and each of its objectives can have one or several tasks.

My actual models and all relations:

class PlanObjective(models.Model):
    actionplan = models.ForeignKey(ActionPlan, on_delete=models.CASCADE)
    center = models.ForeignKey(Center, on_delete=models.CASCADE)
    centerobjective = models.ForeignKey(CenterObjective, null=True, on_delete=models.SET_NULL)
    description = models.TextField(max_length=250, null=False, default='')

class PlanSubObjective (models.Model):
    actionplan = models.ForeignKey(ActionPlan, on_delete=models.CASCADE)
    center = models.ForeignKey(Center, on_delete=models.CASCADE)
    planobjective = models.ForeignKey(PlanObjective, on_delete=models.CASCADE)
    description = models.TextField(max_length=250, null=False, default='')


class PlanSubObjectiveTask (models.Model):
    actionplan = models.ForeignKey(ActionPlan, on_delete=models.CASCADE)
    center = models.ForeignKey(Center, on_delete=models.CASCADE)
    planobjective = models.ForeignKey(PlanObjective, on_delete=models.CASCADE)
    plansubobjective = models.ForeignKey(PlanSubObjective, on_delete=models.CASCADE)
    is_complete = models.CharField(max_length=2, null=True, blank=True, default='0')

This is my actual query:

plans = PlanSubObjectiveTask.objects.filter(period=period).select_related(
        'plansubobjective', 'planobjective', 'actionplan')

I was reading the following documentation:
https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#regroup but the results are not the expected.

If you considered that exist a best way to build the queryset is complete welcome.

I really need a help to complete this task.
Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文