2009-01-21 18 views
2

給定一個對象像最近現有對象:Django的ORM:獲取最符合一定條件

class M(models.Model): 
    test = models.BooleanField() 
    created_date = models.DateTimeField(auto_now_add=True) 

給定的樣品的數據(假設單調增加自動CREATED_DATE):

M(test=False).save() 

M(test=True).save() 

M(test=False).save() 

X = M(test=True).save() 

M(test=False).save() 

Y = M(test=False).save() 

M(test=False).save() 

M(test=True).save() 

一個可以使用Django ORM創建一個查詢,返回X(前一個查詢,按日期,其中'test'= True),如果給定Y?如果是這樣,怎麼樣?

換句話說:給定Y,如何得到'test'爲True的最近一個元素?

想法&反饋表示讚賞,謝謝!

回答

6

試試這個

M.objects.filter(created_date__lte=Y.created_date).filter(test=True)[0:1] 

您還可以添加ORDER_BY條款像

M.objects.filter(created_date__lte=Y.created_date)\ 
     .filter(test=True)\ 
     .order_by('-created_date')[0:1] 

這應該工作。

3

隨着Django field lookups的幫助下,你可以實現的東西,你想用下面的表達效果怎樣:

M.objects.filter(test=True, created_date__lt=Y.created_date).order_by('-created_date') 

根據是否存在或不在所產生的查詢集的任何元素對象,你可以選擇第一個將成爲你想要的最近對象的對象。