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

发布于 2024-07-12 08:57:52 字数 547 浏览 9 评论 0原文

给定一个像这样的对象:

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

给定示例数据(假设单调递增自动创建的日期):

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,如何获取“test”为 True 的最近的前一个元素?

思想与 感谢反馈,谢谢!

Given an object like:

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

Given sample data (assume monotonically increasing automatic 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()

Can one use the Django ORM to create a query that would return X (the previous query, by date, where 'test'=True), if you are given Y? If so, how?

In other words: Given Y, how does one get the most recent previous element where 'test' is True?

Thoughts & feedback is appreciated, thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

肩上的翅膀 2024-07-19 08:57:52

试试这个

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]

这应该可行。

Try this

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

You can also add an order_by clause like

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

This should work.

指尖凝香 2024-07-19 08:57:52

Django 字段查找的帮助下,您可能会能够使用以下表达式实现您想要的效果:

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

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

With the help of Django field lookups, you may be able to achieve something to the effect of what you want with the following expression:

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

Depending on whether there are or are not any elements in the resulting queryset object, you may pick up the very first one which will be the most recent object that you want.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文