본문 바로가기
Back-end/Django

[Django] CRUD - Update

by 안녕주 2021. 7. 19.

edit.html 작성하기

1. views.py에 edit함수 만들기

- (주의할점) 수정할 데이터의 id값을 받아야함. (path converter를 사용해서 id값을 받아온것 처럼...!)

from django.shortcuts import render,redirect, get_object_or_404 
from django.utils import timezone #추가
from .models import Blog 

def home(request):
    blogs = Blog.objects.all()
    return render(request, 'home.html', {'blogs' : blogs})

def detail(request, id):  
    blog = get_object_or_404(Blog,pk=id) 
    return render(request, 'detail.html', {'blog' : blog})

def new(request):
    return render(request, 'new.html')

def create(request):
    new_blog = Blog()
    new_blog.title = request.POST['title']
    new_blog.writer = request.POST['writer']
    new_blog.body = request.POST['body']
    new_blog.pub_date = timezone.now()
    new_blog.save() 
    return redirect('detail', new_blog.id) 

def edit(request, id):
    edit_blog = Blog.objects.get(id=id)
    return render(request, 'edit.html', {'blog' : edit_blog})

2. urls.py에 path 추가

from django.contrib import admin
from django.urls import path
from blog.views import *  

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name="name"),
    path('<str:id>', detail, name="detail"), 
    path('new/', new, name="new"),
    path('create/', create, name="create"),
    path('edit/<str:id>',edit,name="edit"),
]

3. detail.html에 edit 연결

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Detail</title>
    <style>
        body{text-align: center;}
    </style>
</head>
<body>
    <h1>{{blog.title}}</h1> <br>
    {{blog.writer}} <br>
    {{blog.pub_date}} <br>
    {{blog.body}} <br>
    <a href="{% url 'edit' blog.id %}">수정하기</a>
</body>
</html>

4. edit.html 생성하기

<h1>Update Your Blog</h1>


<form action="" method="post"> 
    {%csrf_token%}
    <p>제목 : <input type="text" name="title" value="{{blog.title}}""></p>
    <p>작성자 : <input type="text" name="writer" value="{{blog.writer}}""></p>
    본문 :  <textarea name="body" id="" cols="30" rows="10" >{{blog.body}}</textarea>
    <button type="submit">Submit</button>
</form>

5. runserver

detail.html

 

edit.html


update 생성하기 : DB에 적용

1. views.py에 update함수 생성하기

from django.shortcuts import render,redirect, get_object_or_404 
from django.utils import timezone #추가
from .models import Blog 

def home(request):
    blogs = Blog.objects.all()
    return render(request, 'home.html', {'blogs' : blogs})

def detail(request, id):  
    blog = get_object_or_404(Blog,pk=id) 
    return render(request, 'detail.html', {'blog' : blog})

def new(request):
    return render(request, 'new.html')

def create(request):
    new_blog = Blog()
    new_blog.title = request.POST['title']
    new_blog.writer = request.POST['writer']
    new_blog.body = request.POST['body']
    new_blog.pub_date = timezone.now()
    new_blog.save() 
    return redirect('detail', new_blog.id) 

def edit(request, id):
    edit_blog = Blog.objects.get(id=id)
    return render(request, 'edit.html', {'blog' : edit_blog})

def update(request,id):
    update_blog = Blog.objects.get(id=id)
    update_blog.title = request.POST['title']
    update_blog.writer = request.POST['writer']
    update_blog.body = request.POST['body']
    update_blog.pub_date = timezone.now()
    update_blog.save() 
    return redirect('detail', update_blog.id)

2. urls.py에 path생성하기

from django.contrib import admin
from django.urls import path
from blog.views import *  

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name="name"),
    path('<str:id>', detail, name="detail"), 
    path('new/', new, name="new"),
    path('create/', create, name="create"),
    path('edit/<str:id>',edit,name="edit"),
    path('update/<str:id>', update, name="update"),
]

3. edit.html의 action지정

<h1>Update Your Blog</h1>

<!-- blog.id도 같이 넘겨주지 않으면 url.py의 path-converter부분의 형식을 맞춰주지 않았기에 오류가남-->
<form action="{% url 'update' blog.id %}" method="post"> 
    {%csrf_token%}
    <p>제목 : <input type="text" name="title" value="{{blog.title}}"></p>
    <p>작성자 : <input type="text" name="writer" value="{{blog.writer}}"></p>
    본문 :  <textarea name="body" id="" cols="30" rows="10" >{{blog.body}}</textarea>
    <button type="submit">Submit</button>
</form>

4. runserver

edit.html
home.htmld을 보니 제대로 수정완료!

 

'Back-end > Django' 카테고리의 다른 글

[Django] Template 상속  (0) 2021.07.19
[Django] CRUD - Delete  (0) 2021.07.19
[Django] CRUD - Create  (0) 2021.07.19
[Django] CRUD - Read  (0) 2021.07.19
[Django] Model 실습  (0) 2021.07.19

댓글