2012-01-12 66 views
0

我有一個模型窗體。該表單包含一個按鈕「添加更多字段」。點擊這個按鈕發送一個AJAX調用,它應該在表單中添加一個文本字段。可以添加任意數量的「文本字段」。Django使用AJAX調用將單個字段添加到模型窗體

我不確定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) 

這需要你的原始形式的細節的優勢 - 即,如果你有特別定義的小部件,或其他限制,或者什麼的。然後它將整個表單限制在一個字段中。這是爲了允許驗證現有模型上的單個字段。

但是,您不想發送整個表單,您只需發送單個字段。 form[field]django.forms.forms.BoundField代表您在通過特定領域

例如,如果你用User模型從django.contrib.auth.models工作,並創建了一個specifi用戶的形式組織,在無通話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 2012-01-12 15:49:40

+0

@SaketChoudhary - 我希望我的更新更清楚。 – Nate 2012-01-12 16:58:39

相關問題