"0. 장고 form 작성"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
4번째 줄: 4번째 줄:
 
장고에선 장고 form이라는 개념을 제공해 데이터 입력의 편의성을 제공한다. 장고에서 제공하는, 데이터를 입력받는 기능이다. html을 자동 렌더링해준다.
 
장고에선 장고 form이라는 개념을 제공해 데이터 입력의 편의성을 제공한다. 장고에서 제공하는, 데이터를 입력받는 기능이다. html을 자동 렌더링해준다.
  
폼을 만들고 html에 <nowiki>{{form}}</nowiki> 이라고만 입력하면 자동으로 html 언어로 변환해 보여준다.
+
폼을 만들고 html(탬플릿)에 <nowiki>{{form}}</nowiki> 이라고만 입력하면 자동으로 html 언어로 변환해 보여준다.
  
 
모델의 제약 외에 폼에서의 제약을 설정하는 등 상세한 변형이 가능하여 많이 이용되는 개념이다.
 
모델의 제약 외에 폼에서의 제약을 설정하는 등 상세한 변형이 가능하여 많이 이용되는 개념이다.
15번째 줄: 15번째 줄:
 
from .models import 모델  # 폼을 적용할 모델을 불러온다.
 
from .models import 모델  # 폼을 적용할 모델을 불러온다.
  
class 폼이름(forms.Form):
+
class 폼이름(forms.ModelForm): # 특별한 경우가 아닌 한 일반폼이 아닌, 모델폼을 사용한다.
 
     class Meta:
 
     class Meta:
 
         model = 모델  # 사용할 모델
 
         model = 모델  # 사용할 모델

2021년 6월 22일 (화) 20:01 판


1 개요

장고에선 장고 form이라는 개념을 제공해 데이터 입력의 편의성을 제공한다. 장고에서 제공하는, 데이터를 입력받는 기능이다. html을 자동 렌더링해준다.

폼을 만들고 html(탬플릿)에 {{form}} 이라고만 입력하면 자동으로 html 언어로 변환해 보여준다.

모델의 제약 외에 폼에서의 제약을 설정하는 등 상세한 변형이 가능하여 많이 이용되는 개념이다.

2 정의

폼을 사용하기 위해선 폼 클래스를 정의해야 한다.

일반적으로 앱의 forms.py 안에 정의한다.

from django import forms
from .models import 모델  # 폼을 적용할 모델을 불러온다.

class 폼이름(forms.ModelForm):  # 특별한 경우가 아닌 한 일반폼이 아닌, 모델폼을 사용한다.
    class Meta:
        model = 모델  # 사용할 모델
        fields = ['필드1', '필드2',...]  # 폼으로 입력할 필드를 입력해준다.
        # fields에 '__all__'을 따옴표까지 함께 넣어주면 모든 필드를 가져오라는 명령이 된다.

2.1 폼필드 제약

클래스 변수로 모델의 속성명 = forms.CharField(label='보여질이름', max_length=100) 따위로 폼 안에서 입력의 제한조건을 걸 수도 있지만, 기왕 모델을 작성하는 거, 모델에서 제한조건을 완성하고 폼에선 보여지는 대상과 방식에 집중하자.

폼 필드에 일일이 제약을 걸 수는 없으니, 모델에서 제약을 걸고 폼에서는 이를 사용하기만 한다.

어차피 모델에서 알아서 폼필드를 만든다.(모델은 유효성검사를 하고, 입력 자체를 막진 못한다. 그럴 때 사용하면 된다. 혹은 HTML 코드에서 입력의 제약을 걸 수도 있는데, 각 폼마다 제약을 거는 게 아니라 한번에 {{form}} 형식으로 불러올 거라면 이곳에서 제약을 걸어주어야 한다.)

2.2 위젯

각 폼 필드는 <input type='text'>와 같은 HTML 위젯을 갖고 있다. 각 폼필드마다 기본적인 위젯을 갖고 있다.

폼필드 안의 옵션에 속성=forms.CharFiedl(....., widget={'class'='클래스값', ...}) 와 같이 옵션을 추가해주면 된다.(역시, HTML에서 입력할 수 있기 때문에 분업을 하는 경우 굳이 사용하진 않는다.)