2020-06-16 github.io에서 작성
django는 일반적인 sql query문 대신 django에서 지원하는 queryset을 사용하여 데이터베이스에서 자료를 가져 올 수 있습니다.
오늘의 TIL은 진행중인 프로젝트에 기능추가를 할 겸 queryset api를 간단하게 정리하고자 합니다.
자세한 내용은 Django queryset 공식문서을 참조해주세요
queryset을 사용하기 위해서는 <modelname>.objects.func()의 형식으로 데이터를 불러와야 합니다.
query_response = TABLE_NAME.objects.all()
가져온 데이터는 object형식으로 바로 사용 할 수 없습니다.
view에서 HttpResponse나 JosnResponse로 리턴을 시키기 위해서 dict형태로 변환시켜줍니다.
JsonResponse(query_response.values()[0])
filter()
TABLE_NAME.objects.filter(FIELD_NAME="value")
만약 두개 이상의 조건문을 지정해야 할 경우
from django.db.models import Q
TABLE_NAME.objects.filter(Q(FIELD_NAME="value") | Q(FIELD_NAME="value"))
exclued()
filter와 반대로 조건에 해당하지 않는 값을 가져옵니다.
TABLE_NAME.objects.filter(FIELD_NAME="value")
필드명을 바로 사용하는 것이 아니라 필드명 뒤에 __조건 을 사용하여 이상,이하 등의 조건을 줍니다.
숫자/시간/날짜
조건문은 약어를 사용하여 표현합니다.
l is less
g is greater
t is than
e is equal
__lt FEILD_NAME < value
__lte : FIELD_NAME <= value
__gt : FIELD_NAME > value
__gte : FIELD_NAME >= value
사용예시
TABLE_NAME.objects.filter(FIELD_NAME__lt = date(yy,mm,dd))
문자열
문자열 또한 숫자/시간/날짜와 마찬가지로 단어의 조합을 이용하여 사용합니다.
__startswith # value로 시작하는 데이터
__endswith # value로 끝나는 데이터
__contains # value가 포함되는 데이터
__istartswith # 대소문자를 구분하지 않는 __startswith
__iendswith # 대소문자를 구분하지 않는 __endswith
__icontains # 대소문자를 구분하지 않는 __contains
사용예시
TABLE_NAME.objects.filter(FIELD_NAME_startswith="value")