0

假设我有modelL;

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

我还有两条记录:

  1. 开始=2012-01-01 7:00:00 停止=2012-01-01 14:00:00
  2. 开始=2012-01-01 7:00:03 停止=2012-01-01 23:59:59

现在我想找到第二个查询,所以开始日期时间应该在开始和停止之间,停止时间应该是 23:59:59。如何进行这样的查询?

更多信息:

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

4

3 回答 3

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,日期与开始时相同”之前发布

于 2013-02-04T10:20:31.350 回答
0

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

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

不过,我不太明白你的第二个条件。您是否希望它仅匹配时间为 23:59:59 的对象,但匹配任何一天?

于 2013-02-04T10:13:02.570 回答
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])
于 2013-02-04T10:16:22.603 回答