당신은 멋쟁이, 우리는 장고쟁이~

0%

Form API 1편 - Bound and Unbound Forms

Form API


Bound and Unbound Forms


하나의 폼 인스턴스는 bound 혹은 unbound 로 종류가 나뉩니다.


Bound Form


폼이 Bound 되어있다라는 표현은, 데이터가 폼에 묶여있는 형태로.

폼에 데이터가 있는 상태를 의미합니다.
해당 폼 인스턴스가, 데이터를 가지고 있다면, Django 는 해당 데이터를 검증하고, 데이터와 함께 HTML 로 렌더링 할수 있게 됩니다.


Unbound Form


만약에 폼이 unbound 되었다면, 해당 폼 인스턴스에는 데이터 검증 작업을 수행할수 없습니다 (검증할 데이터가 없기 때문입니다). 그렇지만, 비어있는 폼을 HTML 로 렌더 할수 있습니다.



폼 클래스로 폼 인스턴스 생성


하나의 unbound 폼 (데이터가 비어있는 폼 인스턴스) 을 생성하기 위해서는, 폼 클래스를 인스턴스화 시켜주면 됩니다.


1
f = ContactForm()

반대로, 폼에 데이터를 묶어주는, bound 폼 인스턴스를 생성하기 위해서는,


묶어줄 데이터를 사전 형태로 전달해주면 됩니다.



1
2
3
4
5
6
7
8
data = {
'subject': 'hello',
'message': 'Hi there',
'sender': 'foo@example.com',
'cc_myself': True
}

f = ContactForm(data)

이 사전안에 keys 는 필드 이름이고, 이는 Form 클래스안의 속성들과 대응합니다.


사전안에 있는 values 는 여러분들이 검증하려고 하는 데이터 입니다. 이들은 보통 문자열로 되어 있지만, 문자열이여만 하는 요구 조건은 없습니다. 전달될 데이터 타입은 필드 마다 다를수 있습니다.


is_bound


만약 여러분들이 form 인스턴스가 bound 인지 unbound 인지 실행시에 구분하고 싶다면, form 의 is_bound 속성의 값을 확인 하면 됩니다. True 혹은 False 를 반환합니다.


shell 에서 확인해보면,


1
2
3
4
5
6
7
In [3]: from forms_more_on_fields.forms import ContactForm                                                                                                             
In [4]: f = ContactForm()
In [5]: f.is_bound
Out[5]: False
In [6]: f = ContactForm({'subject': 'hello'})
In [7]: f.is_bound
Out[7]: True

  • 폼 인스턴스에 데이터가 들어가면, is_bound 를 호출했을때, True 를 반환하고
  • 폼 인스턴스에 데이터가 들어가지 않은 unbound 폼에 is_bound 를 호출하면, False 를 반환합니다

비어 있는 사전을 전달할 경우, 비어 있는 데이터를 가진 bound form 이 됩니다.


1
2
3
4
In [8]: f = ContactForm({})       # 비어있는 사전 전달                                                                                                                            

In [9]: f.is_bound
Out[9]: True

Bound Form 인스턴스를 가지고 있고, 어떻게든 데이터를 바꾸고 싶거나 혹은 unbound form 을 어떠한 데이터를 가지게 하고 싶다면, 또다른 Form 인스턴스를 생성하면 됩니다.


Form instance 안에 데이터를 변경하는 길은 없습니다. 한번 Form 인스턴스가 생성이 되면, 데이터를 가지고 있던 없던, 데이터는 변경이 불가능 합니다!