django 커피 모델링 연습 중 원하는 카테고리를 선택하면 조건에 맞는 커피들을 모두 표시하고 싶었다.
하지만 2개 이상의 즉 n개의 카테고리를 선택할 경우를 생각해야했다.
결론은 filter를 통해 얻은 데이터들을 결합시켜야했는데, union이 떠올라 정보를 찾아 해결하여 기록한다.
category = request.POST.getlist('category[]', '')
category라는 리스트에 1개 또는 2개 이상의 카테고리가 들어올 수 있도록 getlist를 사용해 POST 데이터를 받는다.
if len(category) == 0:
all_category = Category.objects.all()
return render(request, 'home.html', {'error': '카테고리를 선택하세요', 'category': all_category})
당연히 카테고리를 선택하지 않을 경우 error를 반환한다.
else:
drinks = Drink.objects.filter(category_id=category[0])
if len(category) > 1:
for i in range(1, len(category)):
drink = Drink.objects.filter(category_id=category[i])
drinks = drinks.union(drink)
카테고리를 선택했을 경우 우선 첫 번째 카테고리에 해당하는 Drink QuerySet을 filter를 거쳐 drinks에 담는다.
선택한 카테고리가 2개 이상일 경우 drinks QuerySet에 위와 같이 filter를 거쳐 담은 데이터들을 union한다.
이제 데이터들이 모두 이어졌다.
'Backend > Django' 카테고리의 다른 글
[파이썬] Django - 개발환경 버전 문서화 (0) | 2022.06.10 |
---|---|
[파이썬] Django - self.context['request'] / KeyError: 'request' (0) | 2022.06.07 |
[파이썬] Django - checkbox 다중 데이터 처리 (0) | 2022.06.04 |
[파이썬] Django - css 적용 (staticfiles_dirs) (0) | 2022.06.04 |
[파이썬] Django - SNS 기초 실습 8) AWS 서버 구축 (0) | 2022.06.02 |