- ORM SQL 조회
- 클래스객체.objects.all() : SELECT문
- 클래스객체.objects.filter(id='2') : SELECT문 + WHERE절
- 클래스객체.objects.last() : SELECT문 + ORDER BY절 + LIMIT절
↪ last()의 특징으로 무조건 하나의 데이터만 가져오기 때문에 인덱싱하지 않고 사용 가능
- ORM SQL 입력
- 클래스객체(칼럼1=값1, 칼럼2=값2, ....).save() : INSERT문
- ORM SQL 수정
- 인스턴스객체.칼럼1 = 수정할 값1 : UPDATE문
- ORM SQL 삭제
- 인스턴스객체.delete() : UPDATE문
- ORM SQL 조인
- 클래스객체.objects.select_related('본인 클래스의 FK 칼럼명').get(조건....) : JOIN절
- 절차
1. DB에서 전체 데이터 가져오기
datas = Sangdata.objects.order_by('-code')
2. Paginator 클래스 생성자 호출
paginator = Paginator(datas, 5) # Paginator(전체 데이터, 페이지당 데이터개수)
3. 요청주소로부터 받은 page number를 받는다. (없다면 page=1로 설정)
try: page = request.GET['page'] except: page = 1
4. 전달받은 페이지 번호로 paginator 객체의 page() 메소드를 사용하여 페이지에 맞는 데이터를 가져온다.
try: datas = paginator.page(page)
4-1. 전달받은 페이지 번호가 int 형식이 아니라면 1페이지에 있는 데이터를 가져온다.
except PageNotAnInteger: datas = paginator.page(1)
4-2. 전달받은 페이지 번호가 페이징된 페이지 번호를 넘어간다면 마지막 페이지에 있는 데이터를 가져온다.
except EmptyPage: datas = paginator.page(paginator.num_pages)
5. 가공된 데이터를 forwarding 시킨다.
return render(request, "sangList.html", {'list':datas})
- 기능
- paginator.num_pages : 마지막 페이지 번호를 반환
- paginator.page_range : 전체 페이지를 range() 형식으로 반환