본문 바로가기

dev/Django

[Django]Model Form

참고: 2022.02.06 - [dev/Django] - [Django]Forms.py (+ CSRF 설명)

(Form)

: 직접 필드를 정의하고 위젯을 설정해줌(textarea)

  ※ modelform은 연관되어있다.

     → 따로 작성하게 되면 각자 따로 관리하기 번거로움

     → 둘을 연결시킨 modelform이 존재한다.

        (form을 상속받아 form처럼 동작할 수 있으면서 model과 쉽게 연결할 수 있다)


모델폼(Model Form)

: 모델과 필드를 지정해주면 ModelFormForm필드를 생성해준다.

: 추가 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