ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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과 오늘 날짜를 비교할 수 있다.

    반응형

    댓글

Written by 나도개발자.