0

私は ModelForm で作業し、元の投稿データを保持する MultiValueDict を使用して DB に格納されたデータを渡しますu'first_name': [u'XX'], u'last_name': [u'']が、フォームは値を実際のフィールドに完全にレンダリングし[u'']、残りをラップします。

同じ MultiValueDict を通常の Form に渡そうとしても、この問題は発生しません。

辞書を処理する方法や、初期値として割り当てる前にデータを処理する方法がわかりません。

編集:

post からデータを取得してフォームに復元するコード

if request_post_data is not None:
    self.form = self.FORM_CLASS(data=request_post_data)
    self.draft.raw_data = dict(request_post_data) # preserves multiple values per key
    self.draft.save()
else:
# conversion to MultiValueDict restores multiple values per key
self.form = self.FORM_CLASS(initial=MultiValueDict(self.draft.raw_data) if self.draft.raw_data else None)`

request_post_dataデータベースのシリアル化されたフィールドから取得され、実際の値は次のようになります。

<MultiValueDict: {u'last_name': [u''], u'suffix': [u''], u'prefix': [u''], u'first_name': [u'XX'], u'middle_name': [u'']}>

これは、次のように私のフォームに表示されます(ModelFormに送信された場合):

実際の形

ご協力いただきありがとうございます!

4

1 に答える 1

0

インスタンスと提供された POST クエリ dict を使用してフォームをインスタンス化するには、ビューで次の操作を実行できます。

    project = get_object_or_404(Project.objects, pk=project_id)
    projectForm = ProjectForm(request.POST, 
                              instance=project)

いくつかの初期値を提供するには、initial キーワード引数を使用して辞書に初期値を提供する必要があります。

projectForm = ProjectForm(initial={'name': 'my first project'})
于 2012-10-13T14:49:25.950 に答える