Django로 인스타그램 만들기 - 12. Post 생성
참고문서
글 등록(Post create)을 위한 form, view, template, url구현
post/forms.py
from django import forms
from .models import Comment, Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = (
'photo',
)
post/views.py
from .forms import CommentForm, PostForm
...
...
def post_create(request):
if request.method == 'POST':
# PostForm은 파일을 처리하므로 request.FILES도 함께 바인딩
post_form = PostForm(request.POST, request.FILES)
if post_form.is_valid():
# author필드를 채우기 위해 인스턴스만 생성
post = post_form.save(commit=False)
# author필드를 채운 후 DB에 저장
post.author = request.user
post.save()
# 성공 알림을 messages에 추가 후 post_list뷰로 이동
messages.success(request, '사진이 등록되었습니다')
return redirect('post:post_list')
else:
post_form = PostForm()
context = {
'post_form': post_form,
}
return render(request, 'post/post_create.html', context)
templates/post/post_create.html
{% extends 'base.html' %}
{% block title %}Post create{% endblock %}
{% block content %}
<div class="post-create">
{% include 'include/form.html' with form=post_form submit_title='등록' enctype='file' %}
</div>
{% endblock %}
post/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.post_list, name='post_list'),
url(r'^create/$', views.post_create, name='post_create'),
url(r'^(?P<post_pk>\d+)/$', views.post_detail, name='post_detail'),
url(r'^(?P<post_pk>\d+)/comment/create/$', views.comment_create, name='comment_create'),
]
include/form.html
파일에서 form
요소의 enctype
변수를 받아 지정하도록 변경
templates/include/form.html
<form action="" method="post"{% if enctype == 'file' %} enctype="multipart/form-data"{% endif %}>