django에서 시간 범위에 따라 데이터베이스 조회

2360 단어 djangoDateTimerange
웹 폼에서 사용자가 지정한 시간 범위를 가져와 데이터베이스에서 이 시간 범위 내의 데이터를 조회하는 간단한 기능을 소개합니다.데이터베이스의 모델은 다음과 같습니다.
class book(models.Model): 
    name = models.CharField(max_length=50, unique=True)
    date = models.DateTimeField()
      
    def __unicode__(self): return self.name
우리가 폼에서 얻은 Request를 가정해 보세요.GET 내의 시간 범위는 처음에 다음과 같습니다.
request.GET = {'year_from': 2010, 'month_from': 1, 'day_from': 1,
               'year_to':2013, 'month_to': 10, 'day_to': 1}
모델에 저장된date 형식이 모델스이기 때문입니다.DateTimefield (), 리퀘스트의 데이터를datetime 형식으로 처리해야 합니다. (이것은django의 응답 코드의 앞부분입니다.)
import datetime

def filter(request):
    if 'year_from' and 'month_from' and 'day_from' and\
            'year_to' and 'month_to' and 'day_to' in request.GET:
        y = request.GET['year_from']
        m = request.GET['month_from']
        d = request.GET['day_from']
        date_from = datetime.datetime(int(y), int(m), int(d), 0, 0)
        y = request.GET['year_to']
        m = request.GET['month_to']
        d = request.GET['day_to']
        date_to = datetime.datetime(int(y), int(m), int(d), 0, 0)
    else:
        print "error time range!"
이제 획득한datefrom 및 dateto는 단점으로 데이터베이스를 선별했습니다.range 함수, 위 코드와 데이터베이스 조회 동작을 추가합니다.
import datetime

def filter(request):
    if 'year_from' and 'month_from' and 'day_from' and\
            'year_to' and 'month_to' and 'day_to' in request.GET:
        y = request.GET['year_from']
        m = request.GET['month_from']
        d = request.GET['day_from']
        date_from = datetime.datetime(int(y), int(m), int(d), 0, 0)
        y = request.GET['year_to']
        m = request.GET['month_to']
        d = request.GET['day_to']
        date_to = datetime.datetime(int(y), int(m), int(d), 0, 0)
        book_list = book.objects.filter(date__range=(date_from, date_to))
        print book_list
    else:
        print "error time range!"

좋은 웹페이지 즐겨찾기