[파이썬][Django] ModelForm 사용 방법과 예제

Django에서 ModelForm을 사용하여 모델과 연계된 폼을 생성하는 방법과 예제를 살펴보겠습니다. ModelForm은 모델의 필드와 유효성 검사 규칙을 기반으로 폼을 자동으로 생성합니다.

ModelForm 작성

예를 들어, 블로그 애플리케이션에서 “Post” 모델에 기반한 폼을 작성하려면 다음과 같이 ModelForm을 작성할 수 있습니다:

# models.py
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

# forms.py
from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

위의 코드에서 PostFormPost 모델과 연결되어 모델의 필드와 유효성 검사를 상속합니다.

ModelForm 사용

이제 PostForm을 뷰에서 사용하여 데이터를 저장하고 유효성을 검사할 수 있습니다. 예를 들어, 게시물을 작성하는 뷰를 만들어보겠습니다:

# views.py
from django.shortcuts import render, redirect
from .forms import PostForm

def create_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            # 폼이 유효한 경우 데이터 저장
            new_post = form.save()
            return redirect('post_detail', pk=new_post.pk)
    else:
        form = PostForm()
    
    return render(request, 'create_post.html', {'form': form})

위의 코드에서 create_post 뷰는 POST 요청일 때 폼을 생성하고, 폼이 유효하면 데이터를 저장하고 게시물 세부 정보 페이지로 리디렉션합니다.

템플릿에서 ModelForm 렌더링

마지막으로 템플릿에서 ModelForm을 렌더링할 수 있습니다. 템플릿에서 폼 필드를 쉽게 출력하려면 다음과 같이 할 수 있습니다:

<pre>
<code>

<!-- create_post.html 템플릿 -->
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">게시물 작성</button>
</form>

</code>
</pre>

위의 코드에서 ``는 폼 필드를 단순한 <p> 요소로 렌더링합니다.

이제 create_post.html 템플릿을 사용하여 게시물 작성 폼을 렌더링하고, 사용자가 폼을 제출하면 폼이 유효한지 검사하고 데이터를 저장하는 뷰를 만들었습니다.