코딩공부/Python Django

[django 실습] 게시판 만들기 - form 이용하기, 글 수정 instance 가져오기

integerJI 2020. 2. 24. 21:45

[django] python django 게시판 만들기 - form 이용하기, 글 수정 instance 가져오기

 

글 수정 html을 더 간단하게 model기반으로 만든 forms.py 이용하기

 

수정할때 기존글을 불러오는 instance


model, admin 설정 : https://integer-ji.tistory.com/89

views에 데이터 가져오기 : https://integer-ji.tistory.com/90

detail page 만들기 : https://integer-ji.tistory.com/91

setting 설정, 데이터 자르기, 정렬하기 : https://integer-ji.tistory.com/93

getbootstrap으로 홈페이지 꾸미기 : https://integer-ji.tistory.com/94

템플릿 상속, url 관리하기 : https://integer-ji.tistory.com/95

디자인 쪼끔 수정 : https://integer-ji.tistory.com/97

글 쓰기 기능 만들기 : https://integer-ji.tistory.com/99

글 수정 기능 만들기 : https://integer-ji.tistory.com/100

글 삭제 기능 만들기 : https://integer-ji.tistory.com/101


forms.py 만들기

from django import forms
from .models import Blog

class BlogUpdate(forms.ModelForm):
    class Meta:
        model = Blog
        fields = ['title','body']

 

BlogUpdate라는 form를 만듭니다.

 

안에는 model을 기반으로 forms클래스의 modelform을 인자로 넘겨줍니다.

 

 

views.py 수정하기

def update(request, blog_id):
    blog = Blog.objects.get(id=blog_id)

    if request.method =='POST':
        form = BlogUpdate(request.POST)
        if form.is_valid():
            blog.title = form.cleaned_data['title']
            blog.body = form.cleaned_data['body']
            blog.pub_date=timezone.now()
            blog.save()
            return redirect('/crudapp/detail/' + str(blog.id))
    else:
        form = BlogUpdate(instance = blog)
 
        return render(request,'update.html', {'form':form})

 

기존의 update 함수를 수정하였습니다.

 

form = BlogUpdate를 가져오며 이를위해 forms.py를 import 해줍니다.

 

방식이 POST라면 save를 하며 cleaned_data를 사용해 저장합니다.

 

GET방식이라면 BlogUpdate를 가져옵니다. 

 

하지만 여기서 가져올때 instance = blog라는 소스를 통해 기존의 해당 게시글의 정보를 가지고 옵니다.

 

 

update.html 수정하기

{% extends 'base.html' %}

{% block content %}

<br>
<div class="container">
	<form method="POST">
	  {% csrf_token %}
	  <table>
		{{form.as_table}}
	  </table>
	  <br>
	  <input class="btn btn-dark" type="submit" value="수정하기">
  </form>
</div>

{% endblock %}

 

기존의 창을 전부 없애고

 

table안에 {{form.as_table}}를 넣어줍니다.

 

입력폼은 as_table(), as_p(), as_ul() 등 여러가지 있습니다.

 

 

확인

 

기존의 글을 그대로 가져옵니다.

 

 

정상적으로 같은 글에 저장이 됩니다.

 

 

git push

git init

git add .

git commit -m "코멘트"

 

git push origin master

 

 

---