Django

model form

체리1001 2021. 8. 30.

웹 서비스에서의 폼은 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

댓글