Byurxafayxvsmrkhiizx
손종국
  • 2016.7.1 23:18
  • 조회수 89
  • 답변수 1
Byurxafayxvsmrkhiizx
손종국
  • 2016.7.1 23:18
  • 조회수 89
  • 답변수 1

DateTimeField로 인한 RuntimeWarning

사실 뒤의 404 실습이나 레이아웃 실습까지도 잘 하고 있었습니다. 그 와중에 http://127.0.0.1:8000/areas/미국/ 에 접근했을 때 이전처럼 poll이 나타나지 않고, area.html로 설정한 여론조사가 없습니다.라는 글만 나타났습니다. 갑자기 왜 이런가 콘솔을 보니 콘솔에는 RuntimeWarning를 보여주고 있었습니다. 콘솔에서 보인 에러는 아래와 같습니다.

[01/Jul/2016 14:11:05] "GET / HTTP/1.1" 200 1451
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/fields/__init__.py:1453: RuntimeWarning: DateTimeField Poll.start_date received a naive datetime (2016-07-01 14:11:09.654561) while time zone support is active.
  RuntimeWarning)
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django/db/models/fields/__init__.py:1453: RuntimeWarning: DateTimeField Poll.end_date received a naive datetime (2016-07-01 14:11:09.654561) while time zone support is active.
  RuntimeWarning)
[01/Jul/2016 14:11:09] "GET /areas/%EB%AF%B8%EA%B5%AD/ HTTP/1.1" 200 627

해당 건을 해결해보고자 여러 방향으로 찾아봤습니다.
우선 강의 자료의 소스를 복붙한 상태에서 강의자료 가장 아래의 settings에 추가하라는 내용도 넣었습니다. 그리고 따로 찾은 자료를 바탕으로 USE_TZ를 false로 해보거나 datetime대신에 timezone을 쓰는 방법도 해 보았습니다. 하지만 해결은 되지 않고 위 에러만 나타났습니다.


** 질문 작성 후 확인된 사항
날짜 이슈라고 생각해서 poll이 3개 생성되어 있었는데 2개를 지워보니 정상적으로 나타나는 것을 확인할 수 있었습니다. 화면은 정상적으로 보이지만 콘솔에서는 여전히 해당 에러가 찍히고 있습니다. 해당 에러로 인해 여론조사가 없습니다.라고 찍히는 것은 아님을 알았지만 poll = Poll.objects.get(area = area, start_date__lte = today, end_date__gte=today) 부분으로 인해 문제가 생긴 것으로 추측이 됩니다. (로그 찍어보기로 확인)

  • #장고를 활용한 웹사이트 만들기
  • #여론조사 화면 구현

1 답변

  • Spgjnhnsidwygch8ddkd
    Chandler
    • 2016.7.4 21:23

    from django.shortcuts import render
    from django.http import HttpResponse
    
    from .models import Candidate, Poll, Choice
    from django.utils import timezone # 변경
    
    # Create your views here.
    def index(request):
        candidates = Candidate.objects.all()
        context = {'candidates':candidates}
        return render(request, 'elections/index.html', context)
    
    def areas(request, area):
        today = timezone.now() # 변경
        try :
            poll = Poll.objects.get(area = area, start_date__lte = today, end_date__gte=today)
            candidates = Candidate.objects.filter(area = area)
        except:
            poll = None
            candidates = None
        context = {'candidates': candidates, 'area' : area, 'poll' : poll }
        return render(request, 'elections/area.html', context)
    

    timezone 위처럼 사용하셨나요?
    이 방법으로 해결되네요. 한번 비교 부탁드릴께요.

    • 저도 이렇게 고치니까 잘 되요. 저도 poll 을 2개 사용하였고 오늘 날짜 기준으로 해당되는 여론조사를 2건으로 설정하였습니다. -이성용
      2016.7.20 23:11

답변 쓰기

이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.