참고: 2022.02.06 - [dev/Django] - [Django]Forms.py (+ CSRF 설명)
폼(Form)
: 직접 필드를 정의하고 위젯을 설정해줌(textarea)
※ model과 form은 연관되어있다.
→ 따로 작성하게 되면 각자 따로 관리하기 번거로움
→ 둘을 연결시킨 modelform이 존재한다.
(form을 상속받아 form처럼 동작할 수 있으면서 model과 쉽게 연결할 수 있다)
모델폼(Model Form)
: 모델과 필드를 지정해주면 ModelForm이 Form필드를 생성해준다.
: 추가 html구현하지 않아도 되고, 자동으로 유효성 검사를 해준다.
- forms.py -
from django.forms import ModelForm from two.models import Res from django.utils.translation import gettext_lazy as _ # gettext_lazy를 _로 사용하는 일종의 지시자 ! # 여러 언어로 번역. 다국어 지원하는 기능의 패키지. # 장고의 번역함수 중 하나. 사이트를 나중에 번역하고자 할 때 유용하다. class ResForm(ModelForm): # ModelForm은 모델과 필드를 지정해주면 form필드를 생성해줌. class Meta: # Meta클래스: 데이터 추가할 때 사용 model = Res # 어떤 모델 클래스를 사용할 것인지(Res모델클래스) fields = ['title', 'con'] # 안의 필드를(2개) 적어주면 form과 동일한 형태로 사용 가능 labels = { # 문자 자체를 띄움 'title':_('타이틀'), # 한글로 설정했다! 'con':_('콘텐츠'), # _사용하지 않으면 'con':gettext_lazy('콘텐츠'),라고 작성해야함 } help_texts = { # 도움말 형태로 뜸! 'title':_('제목입력'), 'con':_('내용입력'), } error = { 'name':{'max_length':_('제목이 길다.'),} } |
Meta Class
: 메타데이터는 다른 데이터에 대한 정보를 제공하는 특정 데이터 집합을 의미.
: 모델 자체에 데이터를 추가해야 하는 경우 Meta클래스를 사용한다.
+ 모델에 대한 다양한 사항을 정의하는데 사용
+ Meta클래스를 사용해 필드, 데이터베이스 이름 등의 설정을 할 수 있다.
from django.utils.translation import gettext_lazy as _
: 장고의 번역함수 중 하나. 사이트를 나중에 번역하고자 할 때 유용하다. (form, model에서 자주사용함)
- sub.html -
<form action ="{% url 'sub' %}" method ="post"> <!--post방식으로 보내줌--> {% csrf_token %} <!--인증--> <table> {{form.as_table}} <!--as_table: 기본적으로 모델폼에 필드로 정의하면 테이블형태로 뜸--> <!--views의 form--> </table> <button type="submit"> 제출 </button> </form> |
{{form.as_table}}
as_table
: 템플릿 변수로 참조하고있는 화면이 동일한 렌더링으로 제공된다.
: 모델폼에 필드로 정의하면 테이블형태로 뜸
'dev > Django' 카테고리의 다른 글
[Django]ORM(Object-relational mapping) (0) | 2022.02.08 |
---|---|
[Django]admin.py (0) | 2022.02.08 |
[Django]HttpResponse / render (0) | 2022.02.06 |
[Django]Forms.py (+ CSRF 설명) (0) | 2022.02.06 |
[Django]모델 (0) | 2022.02.06 |