2

给定一个像这样的对象:

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 的最近的先前元素?

感谢您的想法和反馈,谢谢!

4

2 回答 2

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]

这应该有效。

于 2009-01-21T06:12:43.140 回答
3

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

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

根据结果​​查询集对象中是否有任何元素,您可以选择第一个元素,这将是您想要的最新对象。

于 2009-01-21T06:12:06.573 回答