내 잡다한 노트
CRUD 본문
Create, Read, Update, Delete를 묶어서 일컫는 말이다. 사용자인터페이스가 갖추어야 할
기능을 가리키는 용어이다.
#페이지네이션
데이터가 많아졌을 때 페이지 번호를 둬서 클릭하면 해당 페이지로 이동하게끔 하는 것.
from django.core.paginator import Paginator
paginator = Paginator(restaurants, 5) # 한 페이지에 5개씩 표시
page = request.GET.get('page') # query params에서 page 데이터를 가져옴
items = paginator.get_page(page) # 해당 페이지의 아이템으로 필터링
#모델Form으로 생성
def create(request):
if request.method == 'POST':
form = RestaurantForm(request.POST) # request의 POST 데이터들을 바로 PostForm에 담을 수 있습니다.
if form.is_valid(): # 데이터가 form 클래스에서 정의한 조건 (max_length 등)을 만족하는지 체크합니다.
new_item = form.save() # save 메소드로 입력받은 데이터를 레코드로 추가합니다.
return HttpResponseRedirect('/third/list/') # 리스트 화면으로 이동합니다.
form = RestaurantForm()
return render(request, 'third/create.html', {'form': form})
# 수정하기
def update(request):
if request.method == 'POST' and 'id' in request.POST:
item = Restaurant.objects.get(pk=request.POST.get('id'))
form = RestaurantForm(request.POST, instance=item) # NOTE: instance 인자(수정대상) 지정
if form.is_valid():
item = form.save()
elif 'id' in request.GET:
item = Restaurant.objects.get(pk=request.GET.get('id'))
form = RestaurantForm(instance=item)
return render(request, 'third/update.html', {'form': form})
return HttpResponseRedirect('/third/list/') # 리스트 화면으로 이동합니다.
template에서
<a href="{% url 'restaurant-update' %}?id={{ item.id }}" class="card-link">수정하기</a>
이렇게 추가를 하는데 나중에 ?id={{item.id}}는 바꿔서 한다.
장고스럽지 않은 코드라고 한다.
# 데이터가 없을 때 오류 띄우기
from django.shortcuts import render, get_object_or_404
'Web > Django' 카테고리의 다른 글
putty가 connection timed out 오류가 계속 떠서... (0) | 2022.05.04 |
---|---|
Relation과 Join (0) | 2022.04.18 |
ORM (0) | 2022.04.11 |
Form (0) | 2022.04.11 |
모델 (0) | 2022.04.10 |