-
[Django] unknown output field 오류 해결 방법카테고리 없음 2021. 10. 24. 17:49
Cannot resolve expression type, unknown output_field
생성일로부터 60일 후를 마감일로 설정하는 필드를 annotate를 사용하여 만든 후, 마감일이 오늘 이전이면 제외시켜주는 코드를 작성했는데 위 오류가 떴다.
review_compositions = ReviewComposition.objects.annotate( deadline=F('created') + timedelta(days=60) ).exclude( deadline__lte=datetime.today() )
이는 새로 만들어준 deadline의 필드 타입을 알 수 없어서 today와 비교할 수 없어서 나타났다.
이때 Sum, Count, Case, Value, Max, Min 등을 이용하는 코드라면 output_field를 입력하면 되지만 이 함수들을 사용하지 않는 경우에 output field를 입력하는 방법을 몰라서 구글링을 해보았다.
시도해본 방법으로는 냅다 output_field 끼워넣기
.annotate( deadline=F('created') + timedelta(days=60), output_field=models.DateField() )
F 안에 넣어보기 등이 있다. 당연히 모두 실패했다.
.annotate( deadline=F('created', output_field=models.DateField()) + timedelta(days=60) )
그러다 찾아낸 방법으로는 ExpressionWrapper를 사용하는 방식이다.
먼저 파일의 최상단에 ExpressionWrapper를 임포트해준다.
from django.db.models import ExpressionWrapper
그 다음 원하는 필드를 Count 등의 함수를 사용하는 것과 같이 감싸주고 output_field를 설정해주면 된다.
review_compositions = ReviewComposition.objects.annotate( deadline=ExpressionWrapper(F('created') + timedelta(days=60), output_field=models.DateField()) ).exclude( deadline__lte=datetime.today() )
이렇게 하면 오류 없이 deadline과 오늘 날짜를 비교할 수 있다.
반응형