【问题标题】:Django ORM: Get most recent prior object that meets a certain conditionDjango ORM:获取满足特定条件的最新先前对象
【发布时间】:2010-10-02 15:04:18
【问题描述】:

给定一个像这样的对象:

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

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

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      试试这个

      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]
      

      这应该可行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-19
        相关资源
        最近更新 更多