기능을 만들기 위해 모델안에 포인트를 저장 할 point라는 필드와 버튼을 눌렀을 때에 날짜를 담기 위한 click_time이라는
필드를 DatetimeField로 만들어주고 계속 누를때마다 수정하기위해 auto_add_now = True를 걸어주었다.
그리고 view.py에 우선 포인트를 저장하는 로직을 먼저 작성해주었다.
위 처럼 작성해주고 db를 확인하면서 포스트맨으로 요청을 보낼때마다 점수가 오르는게 확인이 되서 잘 되는가 싶었는데
이렇게 되면 내가 출석을 하지않고 회원정보를 변경하거나 하게되면 출석 버튼을 눌렀을때 이미 출석했다고 나오는
오류가 생기게 된다. 따라서 이를 해결하기 위해서는 model에서 auto_now_add를 빼고 view.py 안에서 직접 post 시간을 저장하도록 코드해줘야 한다.
해결한 코드를 먼저 보겠다.
코드를 보면 datetime함수가 눈에 보이는데 이 함수를 사용해서 오늘 날짜와 시간을 변수에 저장하고 그걸 다시
click_time 필드 안에 저장하면 된다. 참고로 뒤에 붙은 today().strftime("%Y-%M-%d")는 datetime함수 문법이라고
생각하면 된다. 지금 필요한 날짜 정보는 출석하기 위한 정보이기 때문에 년,월,일이면 충분하다. 따라서 문법을 사용해서
년도 월 일만 담을 수 있게 추출한 것이다.
ex) 2022년12월05일10시7분34초 >>>>>문법사용>>>>> 2022년12월05일
예시 처럼 추출해서 담아주는 것이다. 내가 필요한 정보는 2022-12-05라는 정보이니 안에다가 -를 사이에 넣어주어야 한다.
이렇게 하면 auto_now_add를 사용하지 않고도 view에서 직접 날짜를 넣어줄 수 있다.
이렇게 코드를 작성하면 완성이다. user테이블안에 click_time 필드 속 날짜와 now안에 현재 날짜가 같다면 조건문을
지나가지 못하게 해놓았다.
이 문제로 인해 한참 헤메다가 타입이 다를 경우 형태가 같아도 다른값으로 인식한다는걸 알았다.
print(type(click_time)) , print(type(now)) 를 입력해보고 출력해봐서 타입이 달라서 if문을
무시하고 패스했다는 걸 깨달았다.
이는 model에서 click_time 필드타입을 charField로 바꿔주면서 해결했다.