PackagesListView
코드가 거의 1/3로 줄어들었던 애증의 상품리스트 페이지
이 하나의 view에 적용해야 했던 새로운 개념들은
1) query parameter
2) request.GET.getlist/request.GET.get
3) q = Q()
4) __in
5) filter(q).order_by()
6) distinct
이 모든 것의 총집합은 브랜드 검색 if문/가격순 정렬의 if문/default문을 모두 정리하게 해줬던 눈물과 고통의 api였던,,,!
class PackagesListView(View):
def get(self, request):
brand = request.GET.getlist('brand', None)
ordering = request.GET.get('order', 'id')
q = Q()
if brand:
q &= Q(products__brand_name__in = brand)
packages = Package.objects.filter(q).order_by(ordering).distinct()
results = [{
"id" : package.id,
"name" : package.name,
"image" : package.thumbnail_image,
"price" : package.price,
"brand" : [product.brand_name for product in package.products.all()],
} for package in packages]
return JsonResponse({'result':results}, status=200)