We.TIL 30 : Django 쿼리스트링 간단 사용법

김기욱·2020년 9월 3일
2

We.TIL

목록 보기
49/69
post-custom-banner

쿼리스트링이란?

쿼리스트링이란 사용자가 웹 프로그램으로 입력한 데이터를 전달하는 가장 손쉬운 방법이다. 이 방법은 URL주소 뒤에 입력 데이터를 함께 제공하는데 기본적인 형식은 다음과 같다.

https://hostname"port번호"/folder/file?변수1=값1&변수2=값2

Django에서 쿼리스트링의 사용

간단한 코드와 함께 쿼리스트링을 써보자.
예를들면 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를 인풋하면
자동으로 아웃웨어만 필터링이 된다.

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.
post-custom-banner

0개의 댓글