๋ฐ์ํ
[Project] Django Form (์ฅ๊ณ ํผ)
๐ ๊ฐ์
ํ๋ก์ ํธ ์งํ ์ค createsuperuser๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์๊ณ ๊ทธ ๋ฒ๊ทธ๋ฅผ ๊ณ ์น๋ ์ค์ django form์ ๋ํด์ ์๊ฒ ๋์ด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
๐ Form ์ ๊ธฐ๋ฅ
- Form ํ๊ทธ๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ ๊ธฐ๋ฅ
- ์ ํจ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฅ
๐ ModelForm : Model์ ์ด์ฉํ Form ์์ฑ
# forms.py
class ProjectCreationForm(forms.ModelForm): # forms.ModelForm ์์๋ฐ์
# ํ๋ ์ถ๊ฐ (์ง์ ํ๋๋ฅผ ์ ์ํด๋ ๋จ)
def __init__(self, *args, **kwargs):
#์๋ต
class Meta:
model = Notice # ๋ชจ๋ธ ์ฐ๊ฒฐ
fields = ( # ์์ฑ๋์ด
'name', 'title', 'content',
)
widgets = { # default๊ฐ ๋ณ๊ฒฝ์
'title' : forms.TextInput(attrs={'class': 'form-control'}),
'content' : forms.Textarea(attrs={'class': 'form-control', 'rows': 10}),
}
label = {
'name' : '์ด๋ฆ',
'title' : '์ ๋ชฉ',
'content' : '๋ด์ฉ',
}
def save(self, commit=True): # save() ์ค๋ฒ๋ผ์ด๋ฉ
user = super().save(commit=False)
if commit:
user.save()
return user
def clean(self): # clean() ์ค๋ฒ๋ผ์ด๋ฉ
cleaned_data = super().clean()
title = cleaned_data.get('title')
if '[๊ณต์ง]' in title: # ValidationError - ์๋ฆผ ์ฐฝ ๊ธฐ๋ฅ
raise ValidationError('ํด๋น ๋ฌธ๊ตฌ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.')
return cleaned_data
# ์์ clean()์ ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์๋ ์์
def clean_title(self):
title = self.cleaned_data.get('title')
if '[๊ณต์ง]' in title: # ValidationError ์ปค์คํฐ๋ง์ด์ง
raise ValidationError('ํด๋น ๋ฌธ๊ตฌ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.')
return title
→ ํผ์ ๊ตฌํํ๊ธฐ ์ํด์๋ forms.ModelForm์ ์์๋ฐ์์ผ ํจ
→ ModelForm์ ๋ด๋ถํด๋์ค์ธ Meta๊ฐ ๋ฐ๋์ ํ์ ํจ
- class Meta
- Meta ํด๋์ค ์์ model๊ณผ fielfs๋ฅผ ์ง์ ํ๋ฉด ๋ชจ๋ธ ํผ์ด ์๋์ผ๋ก ํผ ํ๋๋ฅผ ์์ฑํจ.
- model : ๋ชจ๋ธ ํด๋์ค ์ฐ๊ฒฐ
- fields : ํผ์ ์ฌ์ฉํ ์์ฑ ๋์ด
- label : ๋ณ์๋ช ๋์ ์ถ๋ ฅ์ํฌ ๊ฐ
- Meta ํด๋์ค ์์ model๊ณผ fielfs๋ฅผ ์ง์ ํ๋ฉด ๋ชจ๋ธ ํผ์ด ์๋์ผ๋ก ํผ ํ๋๋ฅผ ์์ฑํจ.
- forms.ModelForm ๋ฉ์๋
- save() : ์ ์ฅ
- clean() : ์ ํจ์ฑ๊ฒ์ฌ ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์
- ์ฌ์ฉ์์๊ฒ ๋ฐ์ ์์ด๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋์ง ํ์ธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ์น์ฌ๋ถ ํ์ธ
-
- clean_ํ๋๋ช
: ํด๋น ํ๋๋ง ์ ํจ์ฑ๊ฒ์ฌ
- error ์ฌ๋ถ์ ๋ฐ๋ผ is_vaild()์ ๋ฆฌํด๊ฐ์ด True or False๋ก ๊ฒฐ์ ๋๋ค.
- clean_ํ๋๋ช
: ํด๋น ํ๋๋ง ์ ํจ์ฑ๊ฒ์ฌ
๐ Form ํ๋ ์ ์
๋ชจ๋ธํผ๊ณผ๋ ๋ค๋ฅด๊ฒ ํ๋๋ฅผ ์ง์ ์ ์ํจ
Form ํ๋ ํ๋ผ๋ฏธํฐ (Model ํ๋ ํ๋ผ๋ฏธํฐ์ ์ ์ฌ)
- max_length : ์ต๋๊ธ์์
- required : ํ์๊ฐ
- label : name, title, content์ ๊ฐ์ ๋ณ์๋ช ๋์ ์ ์ถ๋ ฅ์ํฌ ๊ฐ - ๊ฐ๋ช ๊ฐ๋
- initial : ํผ์์ ์ ๋ ฅ์ํฌ ์ด๊ธฐ๊ฐ - defu
- validators : ์ ํจ์ฑ๊ฒ์ฌ (์ ํจ์ฑ ๊ฒ์ฌ๋ Model์์ ํ๋ ๊ฑธ ์ถ์ฒ)
def __init__(self, *args, **kwargs) : ์์ฑ์
- widget.attrs.update() : ์์ ฏ ์์ฑ๊ฐ ๋ณ๊ฒฝ
forms.Form ๋ฉ์๋
- clean() : ์ ํจ์ฑ๊ฒ์ฌ
๐ View -> Form ๋ฐ์ดํฐ ๋๊ธฐ๊ธฐ
Form์ ์์ฑ์์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๋ฉด ๋จ
views.py
form = UserCreationForm(user = request.user) # GET๋ฐฉ์
form = UserCreationForm(request.POST, user = request.user) # POST๋ฐฉ์
forms.py
class UserCreationForm(forms.Form):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user') # pop์ ์ด์ฉํ์ฌ ๋ฐ์
super().__init__(*args, **kwargs)
๋ฐ์ํ
'Django > DRF' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Project] Django allauth๋ฅผ ์ด์ฉํ ์์ ๋ก๊ทธ์ธ - ๊ธฐ๋ณธ ์ค์ (0) | 2023.01.05 |
---|---|
[Project] Django createsuperuser ์ ๋ ฅ ๊ฐ ์ง์ (0) | 2023.01.03 |
[Project] ์ฅ๊ณ admin ํ์ด์ง css ์ค๋ฅ (0) | 2022.12.30 |
[Project] HTML์ ์ ๋ณด๋ฅผ E-Mail๋ก ์ ์กํ๊ธฐ (0) | 2022.12.27 |
[Project] ํฌํธํด๋ฆฌ์ค ์น์ฌ์ดํธ ๋ง๋ค๊ธฐ (0) | 2022.12.15 |