0

私がmodelLを持っているとしましょう。

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

また、次の 2 つのレコードもあります。

  1. start=2012-01-01 7:00:00 stop=2012-01-01 14:00:00
  2. start=2012-01-01 7:00:03 stop=2012-01-01 23:59:59

ここで、2 番目のクエリを検索したいので、開始日時は開始と停止の間にある必要があり、停止には 23:59:59 の時間が必要です。そのようなクエリを作成する方法は?

いくつかの詳細情報:

これには F オブジェクトが必要だと思います。start -> time が別の start -> time と stop -> time の間にあり、 stop -> time が 23:59:59 で、date が start と同じであるすべてのレコードを検索したい

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)

しかし、私はあなたの2番目の条件をよく理解していません。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 に答える