[DRF] Django ORM - Cast, F(), ExpressionWrapper

JinUk Lee·2023년 11월 14일
0

DRF 학습하기

목록 보기
43/57
post-custom-banner

Cast

cast 는 컬럼의 타입을 변경시켜준다.

from django.db.models.function import Cast

Record.objects.all().annotate(count=Cast( F('count'),FloatField() ))

용도: 계산을 위해 쓴다.

F()

F() 는 모델의 필드, 혹은 어노테이트 된 값을 말한다.

Record.objects.all().annotate(count1=Count('*')).annotate(F('count1'))

이처럼 앞에서 annotate로 선언한 가상의 컬럼을 가져오기 위해 사용한다.

ExpressionWrapper

F()를 계산해줌

testqs = Record.objects.all().values('character')
.annotate(win= Count(Case(When(gamerank=1, then=1))), allgames= Count('*'))
.annotate(winrate=ExpressionWrapper(Cast(F('win') * 100, FloatField() ) / Cast(F('allgames'),FloatField()) , output_field=DecimalField(decimal_places=2)))
profile
개발자 지망생
post-custom-banner

0개의 댓글