내 잡다한 노트

CRUD 본문

Web/Django

CRUD

peanutwalnut 2022. 4. 17. 19:20

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