Django - DateType to String

이제일·2022년 1월 9일
0

Django

목록 보기
15/15
post-thumbnail
post-custom-banner

django에서 DateField를 처리하는 방법

django에서는 모델의 몇몇 Field를 내부적으로 기본 자료형이 아닌 인스턴스로써 저장한다.
대표적으론 다음과 같다.
DateField -> datetime.date
DateTimeField -> datetime.datetime
DateField -> datetime.date
DecimalField -> decimal

때문에 컬럼을 가져올 때 다음과 같이 나온다.

print(TestModel.objects.all().values('testDateField'))

# <QuerySet [{'testDateField' : datetime.date(2022, 1, 9)}, ...]>

to Client

client에게 database의 컬럼을 JSON String 형식으로 전달해주고 싶은 경우 이는 걸림돌이 된다.

그래서 model을 override하는 방법을 찾아보았지만 너무 복잡해보였다.
때문에 반복문으로 일일이 처리해주었다.

querySet = TestModel.objects.all().values('testDateField')

for val in querySet:
	val['testDateField'] = val['testDateField'].strftime("%Y-%m-%d")

print(querySet)

# <QuerySet [{'testDateField' : '2022-01-09'}, ...]>

annotate

하지만 길이가 얼마가 될 지 모르는 컬럼들을 반복문으로 돌리기엔 찝찝하다.

이를 위해서 집계함수등을 사용할 때 쓰이는 annotate
형 변환을 위한 Cast를 사용하는 방법이 있다.


from django.db.models.functions import Cast
from django.db.models import TextField

querySet = TestModel.objects.all().annotate(
	strDate = Cast('testDateField',TextField())
	)
    
print(querySet.values('strDate'))# testDateField가 지워지는게 아닌 strDate가 추가되는 것.


# <QuerySet [{'strDate' : '2022-01-09'}, ...]>

extra를 이용할 수도 있지만 공식 문서에서는 권고하고 있지 않다.

이에 관한 stack overflow

profile
세상 제일 이제일
post-custom-banner

0개의 댓글