2010-09-28 68 views
0

我有一個包含2個相關模型PageScoreHistory和PageImageHistory的模型頁面,其中兩個歷史模型都具有頁面字段作爲Page的ForeignKey並具有日期字段。我遇到的問題是,當我得到PageImageHistory QuerySet的列表時,我希望能夠檢索圖像拍攝時頁面的分數。對於個人PageImageHistory對象,我可以很容易地做到這一點:使用相關表中的值註釋django QuerySet

pih = PageImageHistory.objects.get(id=123) 
score = pih.page.pagescorehistory_set.filter(datetime__lte=pih.captured).latest('datetime') 

但對於一個QuerySet,我想避免運行組的每個成員的查詢。有沒有辦法做到這一點是一種理智的方式,沒有實際循環所有成員?

+0

這是不是很清楚你想要做什麼......你可以發佈模型?什麼是'x.captured'?你的意思是說,你可以將PageImagHistory與一個PageScoreHistory匹配,並且你想在一個查詢中做到這一點? – sebpiq 2010-09-28 21:33:08

+0

[在django中,是否有一種方法可以直接在單個查詢中用相關對象註釋查詢?](http://stackoverflow.com/questions/12135174/in-django-is-there-away直接註釋查詢與相關對象輸入) – arocks 2014-07-15 09:38:47

回答

1

沒有看到你的模型很難,但這是否做你想要的?

PageImageHistory.objects.filter(
    page__pagescorehistory__datetime__lte=x.captured 
).annotate(Max('page__pagescorehistory__datetime') 
+0

對不起,我很困惑。粘貼代碼時我已經離開了x。不,這不是我想要的。我已經有了一組我想要的PageImageHistory對象,我不需要過濾它。但是隻是做註釋(Max('page_pagescorehistory__datetime'))會從所有分數歷史記錄中選擇最近的日期時間,我需要圖像日期之前的最新分數 – 2010-09-29 00:00:36

+1

否 - 它將選擇x之前的最大pagescore歷史日期。被捕獲(不管是什麼),這就是你所要求的。看看[文檔的這一點](http://docs.djangoproject.com/en/1.2/topics/db/aggregation/#order-of-annotate-and -filter-clause)進行解釋。 – 2010-09-29 08:25:57