Django의 메서드를 정리해보자
주로 아래와 같이 작성하여 사용한다.
Model.object.all()
장고 메서드
all() | 해당 테이블의 모든 데이터 셋 가져오기 |
filter() | 특정 조건을 만족하는는 데이터셋 가져오기 (QuerySet형태) |
get() | 특정 조건을 만족하는 1개 데이터 가져오기 (없으면 오류나므로 확실한 데이터를 요청해야함!) |
exclude() | 특정 조건을 제외한 데이터셋 가져오기 |
아래 두 메서드는 ORM 최적화를 위한 장고 기본 제공 메서드 둘 모두 DB 접근횟수를 줄이고 더 빠르게 데이터를 조회할 수 있게 돕는다. 때문에 위 메서드들과 함께 사용하는 경우가 많음! -> related_name을 적용할 수 있다 -> 괄호 안에 테이블, 클래스 명을 여러개 지정 할 수 있다 -> 괄호안에 빈값 = null값 필드를 제외한 모든 필드를 가져온다 |
|
prefetch_related() | 객체가 정참조인 여러개의 객체를 참조 - multiple objects (manytomany or onetomany) -이거나, 또는 역참조 Foreign Key인 객체를 조회할 수 있음 |
select_related() | 객체가 역참조하는 1개의 객체 - single object (onetoone or manytoone) - 이거나, 정참조 (foreign key) 관계인 객체를 조회할 수 있음 |
+ 보통 위의 메서드에 함께 붙여서 사용하는 메서드들
count() | 요청한 데이터의 개수 가져오기 |
first() | 찾은 데이터 중 첫번째 데이터 가져오기 filter/all등과 함께 사용 |
last() | 찾은 데이터 중 마지막 데이터 가져오기 " |
exists() | 데이터 유무를 확인해 True, False 가져오기 |
order_by() | 특정 필드 순서대로 정렬 | () 안에 테이블, - 등의 옵션을 추가 |
filter options
* filter를 사용할 때 꼭 알아두어야하는 부분!
- __ 언더바 2개
- 조건을 사용한 경우
- 외부 모델 필드를 사용할 경우
예시 :
# 언더바 참고
# 조건
Model.objects.filter(id__exact = request.user.id)
Model.objects.filter(title__contains="string")
# 외부 모델 참조
Feed.objects.filter(category__community=community)
Feed.objects.filter(comment__user__profile = request.user.nickname)
* filter 로 조건을 검색할때 filter의 괄호 안에 상세 조건을 넣거나, 장고 메서드에 붙여 사용할 수 있다.
- exact iexact
입력과 일치하는 조건을 입력할때 사용
iexact는 대소문자를 가리지 않고 일치하는 조건을 찾아줌
Model.objects.filter(name__exact = "Dan") # 대소문자 맞는 것만 찾아옴
Model.objects.filter(name__iexact = "Dan") # 대소문자 구분x
- contains icontains
일부가 일치하는 조건을 입력할 때 사용
icontains 대소문자 가리지 않고 일부 일치 찾음
Model.objects.filter(name__contains = "Dan")
Model.objects.filter(name__icontains = "Dan")
- in
여러 조건을 포함하는 경우
Model.objects.filter(name__in = ["dan", "minsu"])
예시 : 쿼리 요청을 줄이기 위해 query list에 __in을 사용하여 filter적용
follow_id_list = user_serializer['follower'] +user_serializer['following']
follow_list = Follow.objects.filter(id__in=follow_id_list)
- gt / lt / gte / lte
gt : greater than >
lt : less than <
gte : greater than or equal >=
lte : less than or equal <=
eq : equal =, ==
ne : not equal !=
테이블, 날짜나 시간도 비교 및 필터링이 가능하다
Feed.objects.filter(id__lt=feed_id)
Feed.objects.filter(created_at__gte=datetime.date(2023.05.30))
- startswith / endswith
startswith : 조건으로 시작하는 문자열 검색
endswith : 조건으로 끝나는 문자열 검색
Feed.objects.filter(title__startswith="공지")
union
두 개 이상의 QuerySet 을 하나의 QuerySet으로 합친다
data1 = Feed.objects.filter(title__exact="재료")
data2 = Feed.objects.filter(title__exact="요리")
sum_data = union(data1, data2)
intersecion
교집합으로 두 개 이상의 QuerySet 변수 값을 가져온다
data1 = Feed.objects.filter(title__in="재료")
data2 = Feed.objects.filter(title__in="요리")
교집합_data = intersection(data1, data2)
'AI 웹개발반 > Python, Django' 카테고리의 다른 글
[Django] raise serializers.ValidationError 사용 시 assertEqual로 에러 메세지 비교하기 (0) | 2023.07.01 |
---|---|
[Django + Vue] Profile에 새로운 내용 가져와 추가하기 (0) | 2023.06.30 |
[Django] datetime을 활용해 시간 비교하기 (0) | 2023.06.27 |
[django] 오류를 해결할때 (0) | 2023.06.23 |
[DRF] serializer field옵션 | serializer에 필드 추가, 변경하기 (0) | 2023.06.22 |