수정 Update
※ update = create + detail
생성하는 화면 + 상세 Data 수정
수정하기(create)
버튼 만들고 연결하기
- 수정하기 url 연결을 위한 name 지정
- post_card에 수정하기 글씨 버튼 만들기
수정하기 화면 이동
- 수정하기 화면(입력 화면)으로 이동 기능
- post_form.html
수정하기 화면 내용 추가
- Load 됐을 때 화면에 기존에 있었던 사진, 내용 추가
{% extends 'base.html' %}
{% block title %}글 입력{% endblock %}
{% block content %}
<h1>Post 입력 화면</h1>
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div>
<label for="">이미지</label>
{% if post.image %}
<p> 현재 : <a href="{{ post.image.url }}">{{ post.image.name }}</a></p>
<p> 변경 : <input type="file" name="image" accept="image/*" id="id_image"></p>
{% else %}
<input type="file" name="image" accept="image/*" id="id_image">
{% endif %}
</div>
<div>
<label for="id_content">내용</label>
<textarea name="content" id="id_content" cos="30" rows="10">{% if post %}{{ post.content }}{% endif %}</textarea>
</div>
<div>
<input type="submit">
</div>
</form>
{% endblock %}
{% if post %}{{ post.content }}{% endif %}
: content가 있을때 내용을 내용에 넣어주기
{% if post.image %}
<p> 현재 : <a href="{{ post.image.url }}">{{ post.image.name }}</a></p>
<p> 변경 : <input type="file" name="image" accept="image/*" id="id_image"></p>
: 현재에는 어떤 것이고 새로운 것은 어떤 것인지 표시,
{% else %}
<input type="file" name="image" accept="image/*" id="id_image">
{% endif %}
: 이미지 없을때에는 그냥 이미지 추가하기 버튼
※ post-create url은 없어야함
수정시 create가 한번 더 발생하기 때문에 삭제를하지 않으면 중복으로 데이터가 Upload됨
(수정한것 1회, 수정한것으로 새로만들어서 1회)
수정하기(detail)
수정하기 기능 추가
- views.py의 update에 추가하는 Data code 추가
- 특이사항 발생
똑같은 사진을 수정을 해도 이름이 바뀌어서 추가가 계속됨
수정하기 기능 특이사항 대응
- 기존에 있던 파일은 삭제하고 새로운 파일로 저장하는 기능
def post_update_view(request, id):
Post = post.objects.get(id=id)
if request.method == 'GET':
context = {'post' : Post }
return render(request, 'posts/post_form.html', context)
elif request.method == 'POST':
new_image = request.FILES.get('image')
content = request.POST.get('content')
print(new_image)
print(content)
if new_image:
Post.image.delete()
Post.image = new_image
Post.content = content
Post.save()
return redirect('posts:post-detail', Post.id)
Tip
id가 다를 때의 Error 처리
- Post = get_list_or_404(post, id=id, writer=request.user)
id가 다를때 404 Page없음을 일으킨다.
from django.shortcuts import redirect, render, get_list_or_404
def post_update_view(request, id):
#Post = post.objects.get(id=id)
Post = get_list_or_404(post, id=id, writer=request.user)
if request.method == 'GET':
context = {'post' : Post }
return render(request, 'posts/post_form.html', context)
elif request.method == 'POST':
new_image = request.FILES.get('image')
content = request.POST.get('content')
print(new_image)
print(content)
if new_image:
Post.image.delete()
Post.image = new_image
Post.content = content
Post.save()
return redirect('posts:post-detail', Post.id)
def post_delete_view(request, id):
return render(request, 'posts/post_confirm_delete.html')
'학습 > [The-Origin][SW][Backend] Main Pag' 카테고리의 다른 글
[The Origin][2차][Mission][성찰] FAQ 만들기 (0) | 2022.04.23 |
---|---|
[The Origin][VSCODE][Django][CRUD] Delete (0) | 2022.04.22 |
[The Origin][VSCODE][Django][CRUD] Read (2) (0) | 2022.04.22 |
[The Origin][VSCODE][Django][CRUD] Read (0) | 2022.04.22 |
[The Origin][VSCODE][Django][CRUD] Create (0) | 2022.04.22 |