<aside> ๐ซ
[HTML Form์ ํ๊ณ]
์ง๊ธ๊น์ง ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ถ ๋ฐ๊ธฐ ์ํด ํ์ฉํ ๋ฐฉ๋ฒ์ด์ง๋ง, ๋น์ ์์ ํน์ ์ ์์ ์ธ ์์ฒญ์ ํํฐ๋ง ํ ์ ์์
โ ์ ํจํ ๋ฐ์ดํฐ์ธ์ง์ ๋ํ ํ์ธ์ด ํ์ํ๋ค
</aside>
์ ํจ์ฑ ๊ฒ์ฌ๋?
โ ๊ทธ๋ฐ๋ฐ ์ด๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ ๋ ฅ ๊ฐ, ํ์, ์ค๋ณต, ๋ฒ์ ๋ฑ ๋ง์ ๊ฑธ ๊ณ ๋ คํด์ผ ํจ
์ด๋ฐ ๊ณผ์ ๊ณผ ๊ธฐ๋ฅ์ ์ง์ ๊ฐ๋ฐํ์ง ์๊ณ Django๊ฐ ์ ๊ณตํ๋ Form์ ์ฌ์ฉ
Form Class๋ฅผ ์์ ๋ฐ์ ๋ด์ฉ๊ณผ ์ ๋ชฉ์ ๋ํ ์ฌ์ฉ์ ์
๋ ฅ์ ๋ฐ๋ ArticleForm์ ์ ์ํ๋ ๋ฐฉ๋ฒ
# articles/forms.py
from django import forms
class ArticleForm(forms.Form):
title = forms.CharField(max_length=10)
content = forms.CharField()
Form Class๋ฅผ ์ ์ฉํ ์๋ก์ด Logic
view ํจ์ new ๋ณ๊ฒฝ
# articles/views.py
from .forms import ArticleForm
def new(request):
form = ArticleForm()
context = {
'form': form,
}
return render(request, 'articles/new.html', context)
new ํ์ด์ง์์ form ์ธ์คํด์ค ์ถ๋ ฅ
<!-- articles/new.html -->
<h1>NEW</h1>
<form action="{% url 'articles:create' %}" method="POST">
{% csrf token %}
{{ form }}
<input type="submit">
</form>

Form class๊ฐ ๋์ฒดํ๋ ๊ฒ

: HTML โinputโ element์ ํํ์ ๋ด๋นํจ. Django Form์ widgets์ ๊ฐ ํ๋๊ฐ HTML์์ ์ด๋ป๊ฒ ๋ ๋๋ง ๋ ์ง๋ฅผ ๊ฒฐ์ ํจ
Widget์ ๋จ์ํ input ์์์ ์์ฑ ๋ฐ ์ถ๋ ฅ๋๋ ๋ถ๋ถ์ ๋ณ๊ฒฝํ๋ ๊ฒ

<aside> ๐
Form vs ModelForm
Form
ModelForm
ModelForm
ModelForm class ์ ์
๊ธฐ์กด ArticleForm ํด๋์ค ์์
# articles/forms.py
from django import forms
from .models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = '__all__'
: ModelForm ์ ์ ๋ณด๋ฅผ ์์ฑํ๋ ๊ณณ
Meta class๋ ModelForm ๋ด๋ถ์์ ์ด๋ค ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐํ ์ง, ์ด๋ค ํ๋๋ฅผ ์ฌ์ฉํ ์ง ๋ฑ์ ์ ์ํ๋ ์ค์ ๊ณต๊ฐ์
ํผ์ ๋์ ๋ฐฉ์์ ์ ์ดํ๋ ํต์ฌ ์ญํ ์ ํจ
fields ๋ฐ exclude ์์ฑ
exclude ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์์ ํฌํจํ์ง ์๋๋ก ํ๋๋ฅผ ์ง์ ํ ์๋ ์์
# articles/forms.py
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
exclude = ('title',)
Meta class ์ฃผ์์ฌํญ
Meta ํด๋์ค๋ก ์์ฑํ์ ๋ฟ์ด๋ฉฐ, ํ์ด์ฌ์ inner class์ ๊ฐ์ ๋ฌธ๋ฒ์ ์ธ ๊ด์ ์ผ๋ก ์ ๊ทผํ์ง ๋ง ๊ฒ!