2012-01-12 7 views
0

私はModelフォームを持っています。フォームには、[Add more Field]ボタンが含まれています。このボタンをクリックすると、AJAX呼び出しが送信され、フォームにテキストフィールドが追加されます。任意の数の「テキストフィールド」を追加できます。Djangoは、AJAX呼び出しを使用してModelフォームに単一フィールドを追加します。

データベースの同じモデルフォームのテーブルに「余分に追加されたフィールド」のデータを保存する必要があるため、Django-Formsetsが正しい方法であるかどうかはわかりません。

どうすればこの問題を解決できますか?

答えて

1

私は最近、これに似た何かをした、と私の解決策は、動的にフォームをサブクラス化することでした、必要なフィールドのみを提供し、ちょうどそのフィールドのレンダリング:これはあなたの元のフォームの仕様を活用するに

from forms import SomeModelForm 
from models import SomeModel 
def view_name(request,pk,field): 
    SomeModelFieldForm(SomeModelForm): 
     class Meta(SomeModelForm.Meta): 
      fields = (field,) 

    inst = SomeModel.objects.get(pk=pk) 
    form = SomeModelFieldForm(instance=inst) 

    #the rest of your view goes here... 

    #...send only the form's field: 
    ctx = {'field': form[field]} 
    return render_to_response("template",ctx) 

を - つまり、特別に定義されたウィジェットやその他の制限がある場合などです。フォーム全体を1つのフィールドに制限します。これは、既存のモデル上の単一フィールドの検証を可能にするためです。

ただし、フォーム全体を送信したくない場合は、1つのフィールドのみを送信します。 。form[field]は、あなたが渡す特定のフィールドを表しdjango.forms.forms.BoundFieldある

たとえば、あなたがdjango.contrib.auth.modelsからUserモデルを使用していた、とあなたは。仕ユーザーのためのフォームを作成し、アイドルにform["username"]を呼び出した場合に返されます:

<django.forms.forms.BoundField object at 0x01354750> 

print form["username"]を呼び出して印刷します:

<input id="id_username" type="text" name="username" value="name_of_user" maxlength="30" /> 
+0

私はそれを取得できませんでした。それを詳しく教えていただけますか?フォーム[フィールド]とは何ですか? – rightskewed

+0

@SaketChoudhary - 更新がより明確になることを願っています。 – Nate

関連する問題