Django/inflearn

Model Form 사용하기

곽수진 2022. 10. 30. 20:49
반응형

# 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