2011-10-20 5 views
0

djangoフォームを表示しています。 がレンダリングされる前にいくつかのフィールドデータを準備します。 djangoのドキュメントでは、フォームデータにアクセスする場所はたくさんありますが、表示前にフォームデータが設定されている場所はありません。フォームを表示する前にdjangoフォームデータを事前設定する

これを行う方法に関するご意見やご提案はありますか?

ここでは、djangoドキュメントに似た例を示します。

----------- forms.py --------------

class BookForm(ModelForm): 
    author = forms.CharField(max_length=100) 
    title = forms.CharField(max_length=3, 
       widget=forms.Select(choices=TITLE_CHOICES)) 
    birth_date = forms.DateField(required=False) 

----------- views.pyあなたが持っているあなたの意見で--------------

def author_view(request): 
    if request.method == 'POST': 
     # DO My processing... 
    form = BookForm() 
    # How can I edit, or preset my form fields here? 
    c = Context({ 
     'form': form, 
    }) 
    return prepCxt(request, 'book.html', c) # Wrapper for easy display 

答えて

0

def author_view(request): 
    if request.method == 'POST': 
     # DO My processing... 
    form = BookForm() 
    # How can I edit, or preset my form fields here? 
    c = Context({ 
     'form': form, 
    }) 
    return prepCxt(request, 'book.html', c) # Wrapper for easy display 

あなたがもしあなたの前にform=BookForm()を移動する必要があります。

def author_view(request): 
    form = BookForm() 
    if request.method == 'POST': 
     # DO My processing... 

何が起こるかは、if "POST"セクションがフォームに値を追加してからオーバーライドする可能性があります。あなたが欲しい値を変更するtryiongされている場合

BookForm(initial={ 'myfield': 'myval'}) 

Django set default form values:あなたが方法で何かを変更しようとしている場合は第二に

それはあなたがおそらく最良のデフォルト/初期値を追加している表示しますDBに保存する:

if form.is_valid(): 
    myobject = form.save(commit=false) 
    myobject.myfield = mval 
    myobj.save() 

    form = BookForm(instance = myobjext) 

他に何か?より具体的にしてください。

+0

フォームのインスタンス化を言う-1は、if文の前に置く必要があります。ポストデータの場合はポストデータでインスタンス化し、そうでない場合は空のフォームをインスタンス化します。 –

+0

@DanielRosemanそれはする必要はありません。それは他の人の前に行くことができます。それはほとんど違いがありません。 –

関連する問題