2011-01-18 12 views
0

私は、別のモデルの各エントリの応答からなるフォームを持っています。フォームが生成された時点で、各項目への応答が存在する場合と存在しない場合があります。存在する場合は応答を更新し、存在しない場合はフォームの投稿データで作成するフォームが必要です。フォーム作成後のDjango ModelFormインスタンス化

現在、私は、範囲を反復処理し、POSTデータで自分のフォームを作成しています:

forms = [SpecialNoteForm(request.POST, prefix=str(x),) for x in rang(1,3)] 

私はこれをやっている私は識別するために、きれいにフォームデータにアクセスするためにどのように他を知らないので、フォームがインスタンス化されるべきオブジェクト。しかし、私はこれを行った後

for form in forms: 
      try: 
       instance = SpecialNote.objects.get(flag=form["flag"].data, host=form["host"].data) 
       form.instance = instance 
       form.save() 

フォーム上のエラーが続く:私は、フォームデータにアクセスすることができますので、フォームのリストが作成された後、私はこのような何かをやってみました。フォームの作成時にオブジェクトをインスタンス化するために必要なデータにアクセスする方法や、インスタンスをインスタンスに添付した後にフォームを再評価する方法が必要です。同時に、フォーム上のintial値を可能にしながら、私は、フォームをインスタンス化する方法がわからない - 私は私の最初のアプローチで行ったように、私はモデルフォームセットのと同じ問題に遭遇した

EDIT

インスタンスを持たないそれは、ユーザが記入必須フィールドにこれらを提出したかどうかをインポートですので、私は手を前に、モデルのすべてのインスタンスを作成したくない

私の現在のアプローチは、まだモデルのフォームを使用している:。

forms = [] 
for n in form_range(request.POST): # calculates number of forms based on post data 
    try: 
     instance = SpecialNote.objects.get(flag=request.POST.get('%s'%n+'-flag'), host=request.POST.get('%s'%n+'-host')) 
    except: 
     instance = None 
    forms.append(SpecialNoteForm(request.POST, prefix=str(n), instance=instance)) 
    for form in forms: 
     if form.is_valid(): 
      form.save() 

要約すると、フォームセットの問題は、フォームを照会できるようにしなくても、つまりデータベースに既に存在するフォームを正しくインスタンス化する方法がわかりません。通常のモデルフォームと接頭辞を使用する際の問題は、それらをインスタンス化する必要があるオブジェクトを取得することが面倒です(私の現在のアプローチからわかるように)。私はこれらの2つの問題のいずれかの解決策を探しています。

答えて

0

1ページに複数の同一のモデルフォームがあります。model formsetsが対象です。彼らはそれらの問題のすべてを処理する必要があります。

+0

私はドキュメントを書きました。私が表示したいすべてのフォームがすでにモデル内のオブジェクトであり、したがってクエリ可能なオブジェクトであれば、それは十分簡単です。私はリスト形式の初期値を持っていますが、それらのうちのいくつかはモデルオブジェクトを表します(したがって、インスタンス化に関する問題)が、一部はそうではありません。何か案は? – freb

関連する問題