728x90
배경
날짜 형식을 받아서 날짜 형식이 맞으면 저장하고 날짜 형식이 맞지 않으면 저장하지 않으려는 코드를 구현하고자 했습니다.
프론트에서 str로 받기 때문에 datetime으로 바꾼 후에 체크해야 하는데 이 점을 잘 알아야 합니다
코드
try:
# 시도: '%Y-%m-%d %H:%M:%S' 형식
datetime_object = datetime.strptime(ended_at, '%Y-%m-%d %H:%M:%S')
except ValueError:
try:
# 시도: '%Y-%m-%dT%H:%M:%S' 형식 (ISO 8601)
datetime_object = datetime.strptime(ended_at, '%Y-%m-%dT%H:%M:%S')
except ValueError:
# 어떤 형식에도 맞지 않을 경우
print(f"{ended_at}은 유효한 날짜 형식이 아닙니다.")
return None
표준으로 처리하려고 할 시 이렇게 긴 코드가 나오고 s에 값이 들어가지 않을 시 Value error를 뿜어내기 때문에 처리 로직이 늘어나게 된다
그래서 django util을 사용하였다
from django.utils.dateparse import parse_datetime
def change_ended_at(self, ended_at: datetime):
if ended_at and parse_datetime(ended_at):
self.ended_at = ended_at
else:
return
설명
ended_at이 있을 경우 parser_datetime에 맞는 형식인지 체크하게 된다.
지금 다시 생각해보니 바로 self.ended_at에 parse_datetime()를 넣어서 datetime 변환된 값을 넣는게 더 좋은 코드인 것 같다.
(가독성에서 안좋으려나)
https://docs.djangoproject.com/en/1.8/_modules/django/utils/dateparse/
배운 점
생각보다 datetime 형식체크를 직접 구현하려고 하면 까다롭다는 것이다
'Django > model' 카테고리의 다른 글
Django | ManyToMany는 사용하면 좋지않다 (0) | 2024.04.11 |
---|---|
[Django] related_name 자동 참조 (1) | 2024.03.18 |