# from django import forms
from django.forms import ModelForm
from second.models import Post
from django.utils.translation import gettext_lazy as _
# class PostForm(forms.Form):
# title = forms.CharField(label='제목', max_length=200)
# content = forms.CharField(label='내용', widget=forms.Textarea)
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['title', 'content']
labels = {
'title': _('제목'),
'content': _('내용'),
}
help_texts = {
'title': _('제목을 입력해주세요.'),
'content': _('내용을 입력해주세요.'),
}
error_messages = {
'name':{
'max_length': _("제목이 너무 깁니다. 30자 이하로 해주세요.")
}
}
▶ 기존의 form만으로도 데이터를 받아서 Post에 레코드를 추가할 수 있지만 post에 속성이 추가되면 form도 계속 수정해야 하고 form으로 받은 데이터를 다시 꺼내서 모델 클래스의 인스턴스에 넣어주어야 하는 번거로움이 있어 Model form을 사용
▶ model = Post : 어떤 모델 클래스를 사용할 것인지 선언
→ Post 클래스를 사용할 것임을 선언
▶ fiels = ['title', 'content'] : 입력받을 필드들 선언
→ title 필드와 content 필드를 사용할 것임을 선언
▶ labels = {'title' : _('제목'), 'content' : _('내용')} : 각 필드의 라벨 명시
→ title 필드와 content 필드 각각에 '제목'과 '내용' 라벨 선언
▶ help_texts = {'title' : _('제목을 입력해주세요.'), 'content' : _('내용을 입력해주세요.')} : 각 필드의 부가 내용 명시
→ title 필드와 content 필드 각각에 '제목을 입력해주세요'와 '내용을 입력해주세요' 부가 내용 선언
▶ error_messages = {'name' : {'max_length' : _("제목이 너무 깁니다. 30자 이하로 해주세요.")}} : models.py 파일에 title 최대 길이를 30자로 명시했기 때문에 max_length 제한을 넘겼을 경우 에러 메시지가 뜨도록 선언
<form action="{% url 'confirm' %}" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<button type="submit">제출</button>
</form>
▶ 출력 화면을 조금 더 예쁘게 정리하기 위해서 <table> 태그를 이용
'Django > inflearn' 카테고리의 다른 글
Django ORM 개요 (0) | 2022.11.01 |
---|---|
Model Form으로 데이터 저장하기 (0) | 2022.10.31 |
폼으로 데이터 전송하기 (0) | 2022.10.21 |
기본 폼 생성하기 (0) | 2022.10.20 |
폼 개요 (0) | 2022.10.19 |