2013-02-04 82 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,而日期是像開始一樣'

相關問題