Django/inflearn

Model Form으로 데이터 저장하기

곽수진 2022. 10. 31. 22:22
반응형

▶ 기존에 작성된 views.py는 내용을 작성해도 데이터가 넘어가지 않았음

 

 

from django.shortcuts import render
from django.http import HttpResponseRedirect

from second.models import Post
from .forms import PostForm


# Create your views here.
def list(request):
    context = {
        'items': Post.objects.all()
    }
    return render(request, 'second/list.html', context)

def create(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            print(form) ## 레코드를 생성하는 코드 필요
        return HttpResponseRedirect('/second/list/')

    form = PostForm()
    return render(request, 'second/create.html', {'form': form})

def confirm(request):
    form = PostForm(request.POST)
    if form.is_valid():
        return render(request, 'second/confirm.html', {'form': form})
    return HttpResponseRedirect('/second/create/')

▶ create 메소드에 GET으로 요청이 들어왔을 때와 form을 통해 POST로 요청이 들어왔을 때를 구분해서 처리하도록 함

▶ 별도의 view 메소드로 구성해도 되지만 하나의 view 메소드(URL)에 GET/POST 요청에 따라 각각 다른 로직을 수행하도록 하는 것이 웹 사이트의 url 디자인이 더 간결해짐

form = PostForm(request.POST) : request의 POST 데이터들을 바로 PostForm에 담을 수 있음

if form.is_valid() : 데이터가 form 클래스에서 정의한 조건에 만족하는지 체크

return HttpResponseRedirect('/second/list/') : 게시글 리스트 화면으로 이동함

 

 

from django.shortcuts import render
from django.http import HttpResponseRedirect

from second.models import Post
from .forms import PostForm


# Create your views here.
def list(request):
    context = {
        'items': Post.objects.all()
    }
    return render(request, 'second/list.html', context)

def create(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            new_item = form.save()
        return HttpResponseRedirect('/second/list/')

    form = PostForm()
    return render(request, 'second/create.html', {'form': form})

def confirm(request):
    form = PostForm(request.POST)
    if form.is_valid():
        return render(request, 'second/confirm.html', {'form': form})
    return HttpResponseRedirect('/second/create/')

/create/에 접근해서 폼 입력 후 제출을 누르면 /create/ 주소로 post 방식으로 데이터가 전달되고 list 페이지로 되돌아감

new_item = form.save() : save 메소드로 입력받은 데이터를 레코드로 추가해 저장

 

 

▶ title과 content에 각각 '제목''내용'을 두 번 입력 후 제출해 데이터 추가

반응형

'Django > inflearn' 카테고리의 다른 글

데이터 조회하기  (0) 2022.11.02
Django ORM 개요  (0) 2022.11.01
Model Form 사용하기  (0) 2022.10.30
폼으로 데이터 전송하기  (0) 2022.10.21
기본 폼 생성하기  (0) 2022.10.20