웹 서비스에서의 폼은 model을 기반으로 만드는 경우가 많다.
그렇기 때문에 django에서는 우리가 작성한 model을 기반으로 자동으로 폼을 생성해주는 model form 기능이 있다.
<바꾸기 전 코드>
#forms.py
from django import forms
class PostForm(forms.Form):
title = forms.CharField(max_length=50, label="제목")
content = forms.CharField(label="내용", widget=forms.Textarea)
#views.py
def post_create(request):
if request.method == 'POST': #사용자가 전송버튼을 눌렀을 때
title = request.POST['title']
content = request.POST['content']
new_post = Post(
title = title,
content = content
)
new_post.save() #데이터베이스에 저장
return redirect('post-detail', post_id=new_post.id) #상세보기 페이지로 이동시켜줌
else: #GET 방식일 때
post_form = PostForm()
return render(request,'posts/post_form.html',{'form':post_form} )
<Model form으로 바꾼 코드>
#forms.py
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta: #PostForm이라는 클래스를 만들 때 적용할 옵션을 넣어주는 클래스
# 이렇게 적어주면 django가 Post 모델을 보고 폼을 생성한다
model = Post
#Model의 여러가지 필드 중 어떤 필드를 폼으로 만들어줄지를 적어줘야한다.
fields = ['title', 'content']
#모든 필드를 폼으로 만들고 싶을 때에는
#fields = '__all__'
#views.py
def post_create(request):
if request.method == 'POST': #사용자가 전송버튼을 눌렀을 때
post_form = PostForm(request.POST) #폼과 데이터를 바인딩해준다
new_post = post_form.save() #바인딩된 내용을 save해주면 데이터베이스에 저장할 수 있다.
return redirect('post-detail', post_id=new_post.id) #상세보기 페이지로 이동시켜줌
else: #GET 방식일 때
post_form = PostForm()
return render(request,'posts/post_form.html',{'form':post_form} )
'Django' 카테고리의 다른 글
Django Pagination 구현하기 (0) | 2021.09.03 |
---|---|
데이터 유효성 검사 (0) | 2021.08.30 |
폼(Form)이란? (0) | 2021.08.29 |
Django 배포 준비 (0) | 2021.08.24 |
Django shell을 이용한 model CRUD (0) | 2021.08.23 |
댓글