전번에 이어 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)