수학과의 좌충우돌 프로그래밍

[django] 글 수정 시 기존의 내용 불러오기 본문

웹프로그래밍/Django

[django] 글 수정 시 기존의 내용 불러오기

ssung.k 2019. 4. 4. 01:18

글 수정 시 기존의 내용 불러오기

글 수정 기능을 구현했지만 수정을 하게 되면 처음부터 글을 다시 쓰는 것과 다를 바가 없었다. 따라서 이를 해결하기 위해서 기존의 데이터를 불러오도록 했다.

먼저 기존에 존재하던 글 수정 함수 edit을 살펴보자.

from .form import CatPost

def edit(request, cat_id):
    cat = Cat.objects.get(id=cat_id)
    # 글을 수정사항을 입력하고 제출을 눌렀을 때
    if request.method == "POST":
        form = CatPost(request.POST, request.FILES)
        if form.is_valid():
            print(form.cleaned_data)
            cat.name = form.cleaned_data['name']
            cat.image = form.cleaned_data['image']
            cat.gender = form.cleaned_data['gender']
            cat.body = form.cleaned_data['body']
            cat.save()
            return redirect('/detail/'+str(cat.pk))

    # 수정사항을 입력하기 위해 페이지에 처음 접속했을 때
    else:
        form = CatPost()
        context={
            'form':form,
            'writing':True,
            'now':'edit',
        }
        return render(request, 'postapp/create_edit.html',context)

현재 프로젝트에서 각각의 글이 고양이에 대한 정보이기 때문에 cat이 하나의 글이라고 생각하면 된다. request 방식에 따라서 두 가지 기능을 처리한다.

  • POST

    이 경우에는 글의 수정사항을 모두 입력하고, 제출을 눌렀을 경우이다. 입력한 내용들을 가져와 저장을 해주고 해당 글의 detail 페이지로 redirect 해준다.

  • GET

    지금은 else로 처리를 해놨지만 GET 방식으로 들어왔을 경우이다. 기존의 form.py 에서 입력 폼을 가져온다.

    from django import forms
    from .models import Cat
    
    class CatPost(forms.ModelForm):
        class Meta:
            model = Cat
            fields = ['name','image','gender','body']
    

 

기존의 내용을 불러오기 위해서는 form을 가져올 때 설정해주어야 한다. 간단하게 설정해줄 수 있는데 다음과 같다.

form = CatPost(instance = cat)

instance라는 속성에 위에서 미리 지정해놓은 글의 객체를 설정하면 현재의 내용을 유지한 채로 form이 나타난다.

Comments