2013-02-04 42 views
0

假设我有modeL;在日期时间范围内查找对象

class MyModel(...): 
    start = models.DateTimeField() 
    stop = models.DateTimeField(null=True, blank=True) 

而且我也有两个记录:

  1. 开始= 2012-01-01 7点00分零零秒停止= 2012-01-01 14点00分○○秒
  2. 启动= 2012-01-01 7时00分03秒停止= 2012-01-01 23:59:59

现在我想找到第二个查询,所以开始日期时间应该是启动和停止之间,和s顶部应该有小时23:59:59。如何做这样的查询?

一些更多的信息:

我认为这需要F对象。我想查找所有记录,其中开始 - >时间介于另一个开始 - >时间和停止 - >时间之间,并且停止 - >时间是23:59:59,并且日期与开始时相同

+1

你很难用新的要求改变你的问题:“时间是23:59:59,日期和开始时一样” – danihp

回答

0

要执行查询:“开始日期时间应该在开始和停止之间”

MyModel.objects.filter(start__gte=obj1.start, start__lte=obj1.stop) 

虽然我不太了解你的第二个条件。你是否希望它只与23:59:59小时相匹配,但是在任何一天?

0
dt = '2012-01-01 8:00:00' 
stop_hour = '23' 
stop_minute = '59' 
stop_sec = '59' 

where = 'HOUR(stop) = %(hour)s AND MINUTE(stop) = %(minute)s AND SECOND(stop) = %(second)s' \ 
     % {'hour': stop_hour, 'minute': stop_minute, 'seconds': stop_ec} 

objects = MyModel.objects.filter(start__gte=dt, stop__lte=dt) \ 
         .extra(where=[where]) 
1

可以使用rangeextra

from django.db.models import Q 
q1 = Q(start__range=(start_date_1, end_date_1)) 
q1 = Q(start__range=(start_date_2, end_date_2)) 
query = (''' EXTRACT(hour from end_date) = %i 
     and EXTRACT(minute from end_date) = %i 
     and EXTRACT(second from end_date) = %i''' % 
     (23, 59,59) 
     ) 

MyModel.objects.filter(q1 | q2).extra(where=[query]) 

声明:发布之前很难回答的要求改变的时间是23:59:59,而日期是像开始一样'

相关问题