2014年5月5日月曜日

DjangoでFormに初期値を渡す

Web frameworkであるDjangoにおいて、Viewを関数で実装する(classを利用しない)時に、Formに初期値を入れる方法のメモです。

Django 1.5系列で試していますが、それ以降でもおそらく変わらないはず。

方法:
Formを生成する際に初期値をDictionary形式で渡す。
form = forms.ProfileForm({"email":request.user.email,"language":profile.language})

以下、全体像です。
forms.pyでFormのclassを定義し、view.pyで初期値を入れたformを返しています。
#forms.py

from django import forms

from django.conf import settings

class ProfileForm(forms.Form):
    email = forms.EmailField(
        label=_('mail address'),
        required=True,
    )

    language = forms.ChoiceField(
        label=_('language'),
        required=True,
        choices=settings.LANGUAGES,
    )


#views.py

@login_required
def formProfile(request):
    profile = Profile(user=request.user,language=request.LANGUAGE_CODE)
    form = None

    if request.method == 'POST':
        form = forms.ProfileForm(request.POST)
        if form.is_valid():
            profile.user.email=form.email
            profile.user.save()
            profile.language=form.language
            profilef.save()
    else:
        form = forms.ProfileForm({"email":request.user.email,"language":profile.language})

    return render(request, 'profile.html', {
        'form': form,
    })

0 件のコメント:

コメントを投稿