[英]Django ORM - join a subquery
我必須將此查詢轉換為 Django ORM,但似乎無法完成。
我嘗試了我能找到的每一個注釋/值/過濾器組合,但我從來沒有把它變成這樣的 JOIN (也沒有糾正結果)。 我還沒有(還)嘗試定義自定義管理器。
SELECT
t.id,
t.name,
dt.deadline
dt.deal_id
FROM
dealtask dt
JOIN task t
ON dt.task_id = t.id
JOIN (
SELECT MIN(deadline) as min_deadline, task_id
FROM dealtask
GROUP BY task_id
) dt2
ON dt.task_id = dt2.task_id
WHERE dt.deadline = dt2.min_deadline
我的模型如下:
class DealTask(models.Model):
deadline = models.DateTimeField(blank=True, null=True)
deal = models.ForeignKey('Deal', on_delete=models.CASCADE)
task = models.ForeignKey('Task', on_delete=models.CASCADE)
class Task(models.Model):
name = models.CharField(max_length=128)
我想查詢:對於每個任務 t,與其相關的最近截止日期 DealTask dt,以及與該 dt 相關的 Deal。
這個查詢在 Django ORM 中可行嗎? 在恆定數量的查詢中,我的意思是。
此外,如果您發現表達相同內容的更簡單的查詢,我會全力以赴。
重現那個確切的查詢會很困難。 但是,您可以在一個查詢中管理結果,但生成的 sql 並不干凈。 而且您無法訪問所有交易屬性。
Task.objects.annotate(
deal_id=Subquery(
DealTask.objects.filter(
task_id=OuterRef('id')
).order_by('deadline').values('deal_id')[:1]
),
deadline=Subquery(
DealTask.objects.filter(
task_id=OuterRef('id')
).order_by('deadline').values('deadline')[:1]
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.