Django 2.0에서 date range

2.0에선 시간을 문자열로 변환하여 사용했는데 문제없이 잘 됐다.

1
2
3
4
date_format    = "%Y-%m-%d %H:%M:%S"
seven_days_ago = (datetime.datetime.now() - datetime.timedelta(days=7)).strftime(date_format)
now_date       = datetime.datetime.now().strftime(date_format)
return Post.objects.filter(created_date__range=[seven_days_ago, now_date], ...).reverse()
Django 2.2에서 date range

위 방법을 그대로 사용하면 naive datetime이라고 뜨면서 위험하다고 알려준다. 해결 방법을 계속해서 찾았는데 타임존으로 변경해야했고 timezone.make_aware 함수를 사용하여 해결할 수 있었다.

1
2
3
seven_days_ago = timezone.make_aware(datetime.datetime.now() - datetime.timedelta(days=7))
today          = timezone.make_aware(datetime.datetime.now())
return Post.objects.filter(created_date__range=[seven_days_ago, today], ...).reverse()
WRITTEN BY

배진오

소비적인 일보단 생산적인 일을 추구하며, 좋아하는 일을 잘하고 싶어합니다 :D
im@baejino.com