过滤最接近给定日期时间的datetime [英] Filter on datetime closest to the given datetime

查看:131
本文介绍了过滤最接近给定日期时间的datetime的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有datetime字段的模型。现在给定一个特定的datetime-DT,我需要得到datetime最接近DT的对象。这是可能吗?



谢谢,

解决方案

你可以得到它有两个查询和一些逻辑:



这个想法是找到一个紧跟在目标日期之后的对象,并返回其中一个:

 #这个方法是在模型的经理
def get_closest_to(self,target)
nearest_greater_qs = self.filter(dt__gt =目标).order_by('dt')
nearest_less_qs = self.filter(dt__lt = target).order_by(' - dt')

try:
try:
nearest_greater = nearest_greater_qs [0]
除了IndexError:
return nearest_less_qs [0]

try:
nearest_less = nearest_less_qs [0]
除了IndexError:
return nearest_greater_qs [0]
除了IndexError:
raise self.model.DoesNotExist(没有最近的对象
因为没有对象)

如果nearest_greater.dt - target> target - nearest_less.dt:
return nearest_less
else:
return nearest_greater

要获得一个查询,您必须将ORM退出到原始SQL。


I have a model which has a datetime field. Now given a particular datetime - DT, I need to get the object which has the datetime closest to DT. Is this possible?

Thanks,

解决方案

You can get it with two queries and some logic:

The idea is to find one object immediately following and one immediately preceding the target datetime and to return one of them:

# this method is on the model's manager
def get_closest_to(self, target)
    closest_greater_qs = self.filter(dt__gt=target).order_by('dt')
    closest_less_qs    = self.filter(dt__lt=target).order_by('-dt')

    try:
        try:
            closest_greater = closest_greater_qs[0]
        except IndexError:
            return closest_less_qs[0]

        try:
            closest_less = closest_less_qs[0]
        except IndexError:
            return closest_greater_qs[0]
    except IndexError:
        raise self.model.DoesNotExist("There is no closest object"
                                      " because there are no objects.")

    if closest_greater.dt - target > target - closest_less.dt:
        return closest_less
    else:
        return closest_greater

To get it with one query, you have to drop out of ORM to raw SQL.

这篇关于过滤最接近给定日期时间的datetime的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆