给出一个像:
这样的对象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的最新前一个元素?
思考&感谢您的反馈,谢谢!
答案 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' )
根据生成的查询集对象中是否存在任何元素,您可以选择第一个将是您想要的最新对象。