쿼리스트링이란 사용자가 웹 프로그램으로 입력한 데이터를 전달하는 가장 손쉬운 방법이다. 이 방법은 URL주소 뒤에 입력 데이터를 함께 제공하는데 기본적인 형식은 다음과 같다.
간단한 코드와 함께 쿼리스트링을 써보자.
예를들면 t-shirt / outwear로 카테고리가 나눠지는 상품데이터가 있다고 가정하자, 모델은 다음과 같다.
class Category(models.Model):
name = models.CharField(max_length=100)
class Product(models.Model):
category = models.ForeignKey('Category',on_delete=models.CASCADE)
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=16, decimal_places=2)
Product는 Category를 FK로 정참조하고 있는 중이다.
이 경우 쿼리스트링을 통해 Product 테이블의 category_id를 활용하면 손쉽게 데이터를 필터링 할 수 있다.
category_num = request.GET.get('category', None)
다음과 같이 category_num이란 변수를 쿼리스트링을 request로 받는 인자로 만들어준다. 다음과 같이 None값을 지정해놓으면 쿼리스트링에 None값이 들어와도 코드실행이 가능하게 만들어준다.
products = Product.objects.filter(category=category_num)
그 다음 쿼리셋을 불러올 때 filter 조건에 GET.get을 통해 받아온 category_num을 넣어주게되면 자동으로 쿼리스트링 URL에서 input된 category_num과 똑같은 category_id에 있는 product만 쿼리셋으로 부르게 된다.
예를들어
category_id = 1 = tshirt
category_id = 2 = outwear 일때
URL주소에 쿼리스트링을 입력해보면
http://127.0.0.1:8000/products?category=1 <---1을 인풋하면
자동으로 티셔츠만
http://127.0.0.1:8000/products?category=2 <---2를 인풋하면
자동으로 아웃웨어만 필터링이 된다.