簡體   English   中英

Django - 如何獲取多對多關系中的所有相關對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM