카테고리 없음

Django Form Class: 반복 작업을 줄여보자

neullo 2024. 4. 15. 15:24

django는 일부 반복되는 작업과 코드를 줄일 수 있는 django form을 제공한다.

 

1. Form 선언하기

✔️ 내가 이 Form에서 입력받고자 하는 데이터에 대한 명세를 작성하는데 형식이나 속성도 일부 Model과 비슷하다.

from django import forms


class ArticleForm(forms.Form):
    title = forms.CharField(max_length=10)
    content = forms.CharField()

 

 

2. Form 적용하기

  • 새 글 작성에 적용하기 (new)
...
{{ form.as_p }}
...

 

 

 

from.forms import ArticleForm
...
def new(request):
	form = ArticleForm()
	context = {
		"form": form,
	}
	return render(request, "new.html", context)
...

 

 

 


 

 

Form rendering options

  • label과 input을 랜더링하는것에 대한 옵션

 

Form Widget

  • 웹 페이지에서 Form Input 요소가 어떻게 렌더링 되어서 보여질지 정의합니다.
  • Form Fields에 할당해서 사용합니다.

 


 

 

3. Django Model Form

✔️ 알아서 Model을 참조해 Form을 만들어주는 ModelForm Class에 대해 알아보자

 

Django가 알아서 Model을 참조해 Model Field를 보고 Form을 만들어주면 어떨까?

 

 

 

Model을 통해서 Form Class를 만드는 방식

from django import forms

from articles.models import Article


class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = "__all__"
        # exclude = ["title"]

 

  • ModelForm이 사용할 데이터를 Meta 클래스에 명시합니다.
  • fields 항목에 내가 form으로 만들고 싶은 항목들을 지정할 수 있습니다.

 

view에서 Django ModelForm 사용하기

...
def create(request):
  form = ArticleForm(request.POST) # form에 request.POST에 있는 데이터 채워
  if form.is_valid(): # form 형식에 맞으면
      article = form.save() # 저장하고 해당 객체 반환 
      return redirect("article_detail", article.id)
  return redirect("new")
...

 

 

 

def new(request):
    form = ArticleForm()
    context = {
        "form": form,
    }
    return render(request, "new.html", context)