기존 모델 클래스의 필드를 입력받는 폼이 있습니다.
이를 Model Form이라고 합니다.
그냥 form 만으로도 데이터를 받아서
Post에 레코드를 추가할 수 있지만,
이렇게 할 경우 Post에 속성이 추가되면
form도 그 때 그 때 수정해 주어야 하고
form으로 받은 데이터를 다시 꺼내서
모델 클래스의 인스턴스에 넣어주어야 하는 번거로움이 있습니다.
Django는 Model form을 제공하여 이 번거로움을 해결해줍니다.
기존의 form형태가 아닌 models.py에서 정의해준 model을 가져다 쓰는
Model Form으로 구현해보겠습니다.
#second/forms.py
# from django import forms
from django.forms import ModelForm
from second.models import Post
# class PostForm(forms.Form): # django의 폼을 상속
# title = forms.CharField(label='제목', max_length=200)
# content = forms.CharField(label="내용", widget=forms.Textarea)
class PostForm(ModelForm):
class Meta:
model = Post # 어떤 모델 클래스를 사용할 것인지
fields = ['title', 'content'] # 입력받을 필드들
전에 만들어 준것과 비교해보면 확실히 간편합니다.
Model에 이미 정의한 형식을 가져다 쓰기 때문입니다.
하지만, label 설정이 빠졌습니다.
form의 label과 더불어 몇가지 더 알아보도록 하겠습니다.
#second/forms.py
from django.utils.translation import gettext_lazt as _
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['title', 'content']
labels = {
'title': _('제목'),
'content': _('내용'),
}
help_texts = {
'title': _('제목을 입력해주세요.'),
'content': _('내용을 입력해주세요.'),
}
error_messages = {
'name': {
'max_length': _("제목이 너무 깁니다. 30자 이하로 해주세요."),
},
}
일단 지금은 이렇게 하면 되는구나 정도로 넘어가고 다음에 더 자세히 다루도록 하겠습니다.
#second/create.html
<form action="{% url 'confirm' %}" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<button type="submit">제출</button>
</form>
form data를 그냥 렌더링 하지 않고
form.as_table로 불러오면
각 필드가 테이블 행으로 렌더링됩니다.
runserver를 해서 create 템플릿을 보면
다음과 같이 필드가 테이블의 행으로 정리된 모습을 볼 수 있습니다.
1. ORM(Object-relational mapping) ORM은 객체지향 언어에서 서로 다른 시스템 간의 데이터 형식 호환을 위해 데이터를 변환하고 맵핑(연결)해주는 기술을 의미합니다. Object는 OOP(Object oriented Programming)에서의 Object, 즉 클래스 형태를 의미합니다. 서로 교류하는 시스템 간에 사용하는 언...
기존에 작성된 views.py의 create 메소드에 GET으로 요청이 들어왔을 때와 form을 통해 POST로 요청이 들어왔을 때를 구분해서 처리하도록 하겠습니다. 이렇게 처리해주면 url mapping을 간결하게 처리할 수 있습니다. * 1. Model Form으로 데이터 저장하기 create에서 유저로부터 form data를 입력받습니다. ...
기존 모델 클래스의 필드를 입력받는 폼이 있습니다. 이를 Model Form이라고 합니다. 그냥 form 만으로도 데이터를 받아서 Post에 레코드를 추가할 수 있지만, 이렇게 할 경우 Post에 속성이 추가되면 form도 그 때 그 때 수정해 주어야 하고 form으로 받은 데이터를 다시 꺼내서 모델 클래스의 인스턴스에 넣어주어야 하는 번거로움이 있습니다...
Django - Basic - 14에서 form을 생성하고 화면에 띄워주기까지 완료했습니다. 이제 사용자가 form에 입력한 데이터를 전송해서 다른 화면에 보여주는 방법을 포스팅하겠습니다. * 1. Overview 1. create페이지에서 유저로부터 데이터를 받습니다. 2. 입력받은 데이터를 어떻게 사용할지 views.py에서 결정합니다. 3. ...
Django Form을 사용해 게시물을 입력하는 화면을 구현합니다. 사용자로 부터 어떤 정보를 입력받을지 생각하면서 코드를 작성하는 것이 좋습니다. 1. 기본 폼 생성하기 second 에 간단한 폼을 생성해보겠습니다. runserver를 한 뒤 http://127.0.0.1:8000/second/create/ 로 접속하면 만들어준 form을 볼...