Django ORM:获取满足特定条件的最新先前对象

时间:2009-01-21 05:58:25

标签: django django-models 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()

如果给出Y,可以使用Django ORM创建一个返回X的查询(前一个查询,按日期,'test'= True)。如果是这样,怎么样?

换句话说:给定Y,如何获得'test'为True的最新前一个元素?

思考&感谢您的反馈,谢谢!

2 个答案:

答案 0 :(得分: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]

这应该有用。

答案 1 :(得分:3)

Django field lookups的帮助下,您可以通过以下表达式实现您想要的效果:

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

根据生成的查询集对象中是否存在任何元素,您可以选择第一个将是您想要的最新对象。