[Django] URL 쿼리스트링 2

dhkim·2020년 8월 7일

Django

목록 보기
9/10

전번에 이어 Q 개체를 사용해 여러 조건을 가진 쿼리스트링을 완성했다

#photo/views.py
...

class PhotoView(View):
    def get(self,request):   
        try:
            query = Q()
            offset = int(request.GET.get('offset', 0))
            limit = int(request.GET.get('limit', 20))
            category = request.GET.get('category',None)
            user = request.GET.get('user',None)
            user_category = request.GET.get('user_category',None)
            if category:
                query.add(Q(collection = Collection.objects.get(
                    user = User.objects.get(user_name='weplash'),
                    name = category
                )),query.AND)
            elif user:
                if user_category == 'photos':
                    query.add(Q(user = User.objects.get(
                        user_name = user
                    )),query.AND)
                elif user_category == 'likes':
                    query.add(Q(like__user = User.objects.get(
                        user_name = user
                    )),query.AND)
                else:
                    query.add(Q(collection__user = User.objects.get(
                        user_name = user
                    ), collection__name = user_category),query.AND)

            photos = Photo.objects.filter(query).prefetch_related("user")
            data = [{
                "id" : photo.id,
                "image" : photo.image,
                "location" : photo.location,
                "user_first_name" : photo.user.first_name,
                "user_last_name" : photo.user.last_name,
                "user_profile_image" : photo.user.profile_image,
                "user_name" : photo.user.user_name,
                "width" : photo.width,
                "height" : photo.height
            } for photo in photos[offset*limit:(offset+1)*limit]]
            
            return JsonResponse({"data":data},status=200)
        
        except ValueError:
            return JsonResponse({"message":"VALUE_ERROR"},status=400)
        except KeyError:
            return JsonResponse({"message":"KEY_ERROR"},status=400)

0개의 댓글