본문 바로가기
개발일지/Python

Python - (filter lookup) shell 사용에 있어서 rating filter 확인 방법 (>=<비교 등호 사용)

by 개발에정착하고싶다 2022. 11. 27.
320x100

django를 사용하며 터미널에

python manage.py shell

을 사용하여서 shell 명령문을 입력하는데 모두 가능했지만, 불가능했던 filter가 있어서 소개하고자 한다.

 

보통 app단위의 models.py에 모델을 class로 정의해 놓고 나면

 

class이름.objects.filter(조건)

으로 입력하면 모두 나왔다.

하지만 평점에 해당하는 rating은 안나오더라.

근본적인 "왜 안되는가"에 대한 이유는 잘 모르겠다.

하지만 어떻게 표현을 할 수있는가는 알게되었다.

 

#1 나는 분명 models.py에 class를 넣을때 그 안에 rating도 정의해 주었다.

착각이 아닌게, 일부러 저장여부도 확인하고 models.py를 틀어놓고 확인하며 진행했다.

 

하지만

Book이라는 class에 대해서

 

Book.objects.filter(rating<3)

이라고 하면 

 

Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'rating' is not defined

이런 에러가 나왔다. 즉, "rating은 정의되지 않았다"

라는 의미다.


#2 그래서 비교등호를 사용하기 위한 방법을 알아봤는데

 

class이름.objects.filter()까지는 똑같은데

arg로 정의 되어야하는 인수가

rating__lte=3

이런식으로 사용하더라

즉,

Book.objects.filter(rating__lte=3)

rating 옆의 언더라인 처리(밑줄)는 한개가 아니라 두개다!

 

이것의 의미는

lower

then

equal

이라는 의미를 가지고 있다.

즉, "이상"이라는 의미다.

 

만약 초과를 의미하고 싶다면

lte자리에 gt를 넣어주면 된다.

 

gt는

greater

then

이라는 의미다.

 

이래도 감이 잘안온다면

#케이스1 이상

조건__gte=

#케이스2 초과

조건__gt=

#케이스3 이하

조건__lte=

#케이스4 미만

조건__lt=

#3 후문

 

신기하게도 조건__e=

는 "동등"을 의미할 것 같은데, 이런 표현을 사용할 수 없다고 나온다

 

자세한건 

https://docs.djangoproject.com/en/4.1/ref/models/querysets/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

여기서 찾기로 Iexact

를 찾아서 거기서 부터 읽어보도록 하자.

300x250