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

0%

Form API 3편 - Dynamic Initial Values

Dynamic initial values


Form.initial


initial 을 사용하여, 실행시에 폼필드의 초기값을 지정할수 있습니다.


예를들면, 여러분들은 현재 세션의 username 을 username 필드에 채워놓고 싶을지도 모릅니다

이런 동작을 구현하기 위해서, initial 인자를 Form 에 써줍니다.


이 인자가 주어질때는, 필드명이 초기값에 매핑되는 사전 형태여야 합니다.


오직 여러분들이 초기값을 지정하고 싶은 필드에만 포함합니다.
폼안에 모든 필드에 쓰는것은 불필요한 일입니다.

예를들면,


1
f = ContactForm(initial={'subject': 'Hi there!'})

이 값들은 오직 unbound 폼에만 표시되고, 만약 특정 값이 주어지지 않을때에 fallback 값으로 사용되지 않습니다.


만약 필드가 initial 을 정의하고, initial 폼을 인스턴스화 할때 포함하면, 두번째가 먼저 택해집니다. 아래 예시에는, initial 이 필드에서 주어졌고, 폼 인스턴스에도 주어졌습니다. 두번째가 우선시 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from django import forms 


class CommentForm(forms.Form):
name = forms.CharField(initial='class')
url = forms.URLField()
comment = forms.CharField()



In [1]: from forms_more_on_fields.forms import CommentForm

In [2]: f = CommentForm(initial={'name': 'instance'}, auto_id=False)

In [3]: print(f)
<tr><th>Name:</th><td><input type="text" name="name" value="instance" required></td></tr>
<tr><th>Url:</th><td><input type="url" name="url" required></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" required></td></tr>

Initial 값이 정해져 있어도,

폼의 인스턴스를 생성할때 initial 을 지정해주면, 인스턴스 생성할때 지정한 initial 값이 해당 필드에 지정이 됩니다.


Form.get_initial_for_field(field, field_name)


get_initial_for_field() 를 사용하여, 폼 필드의 초기 데이터를 조회할수 있습니다. 이는 Form.initial 과 Field.initial 로 부터, 데이터를 조회하고, 그 순서대로 호출 가능한 초기값들을 평가합니다 .