정말정말 큰 도움이 된 자료는 아래 두 가지다.
[1]. 프론트엔드의 쿼리셋이 오는 방식
출처 : https://groups.google.com/forum/#!topic/django-users/bAeibYUzAJg
[2]. (views.py) 필터 로직 구현을 위한 dictionary 활용 방식
출처 : https://able.bio/dfernsby/optional-filters-with-django-querysets--86k2av4
Param탭
에 KEY, VALUE를 각각 지정하였다.collection_id__in
이라는 KEY가 맨 위에, 그리고 가장 아래 각각 작성되었다는 점이다.다시 말해서, collection_id__in : ['1', '3']
과 같이
입력해서는 안 된다.
결과
class BagView(View):
12 def get(self, request):
13 total_bag_info = []
14 collection_option = request.GET.getlist('collection_id__in')
15 theme_option = request.GET.getlist('theme__in')
16 shape_option = request.GET.getlist('shape__in')
17 material_option = request.GET.getlist('material__in')
18
19 filters = {}
20 filters['collection_id__in'] = collection_option
21 filters['theme__in'] = theme_option
22 filters['shape__in'] = shape_option
23 filters['material__in'] = material_option
24
25 new_filters = {}
26 for key, value in filters.items():
27 if value:
28 new_filters[key] = value
29
30 bag_list = Product.objects.filter(
31 name__contains="CHANEL 19"
32 ).prefetch_related(
33 'texture',
34 'productimage_set'
35 ).exclude(id__lt=400).filter(**new_filters)
36
37 total_bag_info = [
38 {
39 'bag_code' : bag.product_code.replace(' ',''),
40 'bag_img' : bag.productimage_set.all()[0].url,
41 'bag_name' : bag.name,
42 'bag_price' : bag.price,
43 'texture' : [texture.name for texture in bag.texture.all()]
44 } for bag in bag_list
45 ]
46 return JsonResponse({'bag_info':total_bag_info}, status=200)