ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django]annotate/Concat/F가 궁금해요
    Django_BE 2023. 7. 24. 23:00
    included_curation = Curation.objects.filter(short_curations__story__id=story_id).annotate(
                rep_pic=Concat(
                    Value(settings.MEDIA_URL),
                    F('photos__image'),
                    output_field=CharField(),
                ),
            )

    여기에서 annotate부터의 코드가 어떻게 구성된것인지 살펴보자.

    • annotate()메서드는 장고의 QuerySet API에서 활용되는 함수로, 데이터베이스 질의 결과에 추가적인 정보를 계산하여 결과에 포함시키는 역할을 한다. 예시 코드에서는 'rep_pic'이라는 새로운 필드를 계산하여 결과에 포함하고 있다.
    • 'rep_pic'-> annotate()메서드를 이용하여 쿼리 결과에 추가될 새로운 필드의 이름이다. 'rep_pic'이라는 이름으로 새로운 필드를 계산하여 결과에 포함된다
    • Concat()-> 장고의 함수로, 여러 필드를 연결하여 새로운 문자열을 생성한다. 이 함수는 문자열 필드인 'photos__image'를 'setting.MEDIA_URL'과 연결하여 'rep_pic' 필드를 계산한다.
    • Vlaue(setting.MEDIA_URL)->장고 설정파일에서 설정된 미디어 파일의 기본 URL을 나타낸다. Vlaue()함수는 파이썬의 리터럴 값을 장고 쿼리에 사용할 수 있도록 감싸주는 wrapper 역할을 한다. 이 경우 MEDIA_URL 설정값을 감싸주어 문자열과 연결연산을 수행할 수 있다.
    • F('photos__image')->F()함수는 데이터베이스 필드를 참조하는데 사용된다. 'photos_image'는 큐레이션 모델과 관련된 사진의 이미지 url을 나타낸다. 이 필드를 Concat()함수에 전달하여 문자열 연결에 사용된다.
    • output_field=CharField()->output_field 매개변수는 Concat()함수에서 생성된 필드의 데이터타입을 지정한다. 따라서 'rep_pic'필드는 문자열로 계산되고 저장될 것이다.
Designed by Tistory.