-
[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'필드는 문자열로 계산되고 저장될 것이다.
'Django_BE' 카테고리의 다른 글
[Django]일대다 관계에 있을때 (0) 2023.09.08 [Django]model 만들기 (0) 2023.09.08 [Django]일대다 관계에 있는 객체의 거꾸로 접근(values_list, pk__in) (0) 2023.07.21 [Django]StoryIncludedCurationAPI (0) 2023.07.21 [Django]다른 팀원의 코드를 pull 했을때 오류가 난다면? (0) 2023.06.07