![](/img/trans.png)
[英]Django: get objects.all() with the related rows in another ManyToMany table
[英]Django - How to get all related objects in ManyToMany relation
我有一個帶有自引用的任務 model。
每個任務都可以有多個任務作為前提任務。
class Task(models.Model):
title = models.CharField(max_length=64)
precondition_tasks = models.ManyToManyField(to='self', symmetrical=False)
我需要一個查詢來獲取所有相關任務。
例如:
a 是 b 的 pre_task
b 是 c 的 pre_task
我想要如果我得到 a,我也會收到 b 和 c
因為a是b的pre_task,b也是c的pre_task。
我可以通過 for 循環和遞歸 function 來做到這一點。但我知道這很糟糕。
我需要這樣做並通過查詢獲取所有相關對象,而不是 for 循環或 Python 中類似的東西。
我曾經用原始 sql 解決同樣的問題
from django.db.models import RawSQL
task_id = 2
recursive_cte = """
WITH RECURSIVE cte AS (
SELECT id, title, ARRAY[id] AS path
FROM task
WHERE id = %s
UNION ALL
SELECT t.id, t.title, cte.path || t.id
FROM task t
JOIN cte ON cte.id = t.precondition_tasks_id
)
SELECT * FROM cte;
"""
related_tasks = Task.objects.raw(recursive_cte, [task_id])
如果對於 api,要在序列化程序中處理您的問題,這里也有一些有用的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.