2009-01-21 22 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') 

根据是否存在或不在所产生的查询集的任何元素对象,你可以选择第一个将成为你想要的最近对象的对象。