我有一个具有日期时间字段的模型。现在给定一个特定的日期时间 - DT,我需要得到日期时间最接近DT的对象。这可能吗?
谢谢,
我有一个具有日期时间字段的模型。现在给定一个特定的日期时间 - DT,我需要得到日期时间最接近DT的对象。这可能吗?
谢谢,
您可以通过两个查询和一些逻辑来获取它:
我们的想法是在目标日期时间之后立即找到一个对象,然后返回其中一个:
# 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
要使用一个查询来获取它,您必须将ORM退出到原始SQL。
我想完成Pavel的答案,如下:
dt__gte
dt__lte
应该用来代替。
提供确切日期时过滤将无法正常工作。