QuerySet 메소드 aggregate() 활용에 대하여
강사님 안녕하세요~
QuerySet 메소드 중 aggregate()를 활용하는데 어려움이 있어서 도움을 요청드립니다.
aggregate()를 활용하여 QuerySet 내 모델 객체에 대한 다양한 집계결과를 하나의 JSON 객체로 반환하고 싶습니다.
문제는 aggregate()의 반환값이 모델로 구성된 QuerySet이 아니라 Dictionary이기 때문에 viewset의 aggregate()로 처리된 값을 Serializer에서 받아서 JSON으로 반환할 때 관련 에러가 계속 발생합니다.
viewset에서 aggregate로 작업한 결과를 받아서 serializer에서 의도한대로 하나의 JSON 객체로 반환할 수 있는 방법이 있을까요?
Model, Serializer, ViewSet에 대한 코드는 아래와 같습니다.
class DogStatusCountViewSet(viewsets.ModelViewSet):
serializer_class = DogStatusCountSerializer
http_method_names = ['get', ]
ordering_fields = '__all__'
def get_queryset(self):
queryset = super().get_queryset()
return queryset.aggregate(
total_count=Count('id'),
estrus_count=Count('id', filter=Q(current_status='estrus')),
pregnancy_count=Count('id', filter=Q(current_status='pregnancy'))
)
class DogStatusCountSerializer(serializers.Serializer):
total_count = serializers.IntegerField(read_only=True)
estrus_count = serializers.IntegerField(read_only=True)
pregnancy_count = serializers.IntegerField(read_only=True)class Dog(models.Model):
current_status = models.CharField(max_length=64, default='estrus')
class Meta:
managed = True
db_table = 'dog'
ordering = ['-id']
답변 1
1
안녕하세요.
말씀하신 경우는 ModelViewSet에서 지원하는 일반적인 CRUD가 아니라, 예외적인 케이스이므로 ModelViewSet으로 구현하시기 보다, 함수 뷰로서 구현하시는 것이 더 나을 듯 합니다.
DRF에는 @api_view 장식자가 있어서, 함수 뷰의 경우에도 DRF의 지원을 받을 수 있습니다.
https://www.django-rest-framework.org/api-guide/views/#api_view
함수 뷰로 구현하시고, Serializer는 굳이 적용하지 마시고, aggregate를 받아서 DRF의 Response로 응답을 하도록 구현해보시면 어떨까요?
안녕하세요.
0
62
1
[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?
0
282
1
useEffect 훅에서 else 유무에 따른 결과
0
221
1
useAxios 훅의 dependency array 설정
0
254
1
useEffect에서 변수 업데이트 관련 질문
0
385
1
rest_framework.generics.CreateAPIView의 model 속성 유무
0
273
1
bootstrap4
0
479
4
리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요
1
373
1
admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법
0
577
3
useState는 필수일까요?
0
269
1
python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.
0
606
4
Django allauth를 사용한 소셜 로그인 시 에러
0
657
1
프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러
0
561
2
useLocalStorage() 함수 사용여부
0
233
1
django에 LOGIN_URL = '/accounts/login/'의 의미?
0
451
1
리듀서의 의미 재확인
0
435
1
simple-jwt Refresh Token 사용 노하우
0
903
2
docker compose 를 통한 배포 관련 오류 문의
0
683
1
파이썬 속도 장고 관련 궁금한게 있습니다.
0
368
1
is_like_user
0
236
1
related_name 오류
0
276
1
re_path 오류
0
263
1
re_path url
0
252
1
No post matches the given query
0
667
2





