0
我有一個模型窗體。該表單包含一個按鈕「添加更多字段」。點擊這個按鈕發送一個AJAX調用,它應該在表單中添加一個文本字段。可以添加任意數量的「文本字段」。Django使用AJAX調用將單個字段添加到模型窗體
我不確定Django-Formsets是否是正確的方法,因爲我需要將「額外添加的字段」的數據存儲在數據庫的同一個模型表中。
我該如何做到這一點?
我有一個模型窗體。該表單包含一個按鈕「添加更多字段」。點擊這個按鈕發送一個AJAX調用,它應該在表單中添加一個文本字段。可以添加任意數量的「文本字段」。Django使用AJAX調用將單個字段添加到模型窗體
我不確定Django-Formsets是否是正確的方法,因爲我需要將「額外添加的字段」的數據存儲在數據庫的同一個模型表中。
我該如何做到這一點?
我做了一些類似的最近,我的解決辦法是動態的子類的形式,只提供外地需要和渲染只是場:
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" />
我沒有得到它。請您詳細說明一下嗎?什麼是形式[字段]? – rightskewed 2012-01-12 15:49:40
@SaketChoudhary - 我希望我的更新更清楚。 – Nate 2012-01-12 16:58:39