1. 앱 디렉토리에 forms.py 생성
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
title = forms.CharField()
contents = forms.CharField()
class Meta :
model = Post # form과 model 연결
fields = ['title', 'contents', 'main_image']
# fields = '__all__' # 피드를 한꺼번에 지정할 수도 있음
2. html에 form 작성
<h1>create</h1>
<p style="color:red;">{{ error }}</p>
<form action="{% url 'create'%}" method="post" enctype="multipart/form-data"> # enctype : 파일첨부시 추가
{% csrf_token %} # 해킹 공격 방어를 위한 토큰
{{ form }}
<button type="submit">저장</button>
</form>
3. views.py에서 POST 처리
def create(request):
if request.method == "POST" :
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False) # 수정할 것 없으면 commit 생략
# post.author = "user1" # form에 입력되지 않은 정보 추가할 수 있음
post.save()
return redirect("/blog")
else :
context = {"form": form, "error":"잘못된 입력입니다."}
return render(request, 'blog/create.html', context)
else :
form = PostForm()
context = {"form": form}
return render(request, 'blog/create.html', context)
def blog_update(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, request.FILES, instance=post)
if form.is_valid():
form.save()
return redirect("blog_details", pk=post.pk)
else:
form = PostForm(instance=post)
context = {"form": form, "pk": pk}
return render(request, "blog/blog_update.html", context)
def blog_delete(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
post.delete()
return redirect("blog_list")