全部,將初始數據添加到使用JavaScript的Django ModelForm(JQuery)
我正在顯示模型表單集合。我正在使用JQuery動態表單集插件[http://code.google.com/p/django-dynamic-formset/]來處理在該表單集內添加/刪除單個表單。
當我添加一個新表單時,我想讓用戶選擇從數據庫中選擇一個模型來填充該表單。我使用AJAX調用Django視圖獲取可用模型。另一個AJAX調用獲取對應於所選模型的表格的form.initial
數據。我的問題是如何獲取最初的數據,並在模板上使用它填充新添加的表單(在客戶端 - 在JavaScript中)。下面是一些相關的代碼:
視圖來獲取初始數據:
def get_content(request):
app_to_get = request.GET.get('a', None)
model_to_get = request.GET.get('m', None)
id_to_get = request.GET.get('i',"")
if not app_to_get and not model_to_get and not id_to_get:
print "invalid or incomplete app/model/id combination"
raise Http404()
id_to_get = int(id_to_get)
# these two fns get me the appropriate classes for the model_to_get
# they work and are irrelevant for my current question
model_class = get_model_from_name(model_to_get,app_to_get)
form_class = get_form_from_model(model_class)
model = model_class.objects.get(pk=id_to_get)
form = form_class(instance=model)
formTemplate = Template("{{ form.initial }}")
formContext = Context({"form" : form})
return HttpResponse(formTemplate.render(formContext));
,這裏是一些JavaScript:
function add_model() {
var url = window.document.location.protocol + "//" + window.document.location.host + "/get_content/";
url += "?a=" + app_to_add_to + "&m=" + model_to_add + "&i=" + id_to_add;
$.ajax({
url : url,
type : 'get',
success : function(data) {
alert(data);
/* I AM HERE I AM HERE I AM HERE */
}
});
return true;
};
在這一點上,data
看起來是這樣的:
{'url': u'http://www.foo.com/', 'id': 2, 'title': u'foo'}
但我不知道如何將數據映射到我新添加的表單。
感謝您的支持。我會試一試。我會在你的筆記1-3中做出你所建議的改變。我會研究注4。 – trubliphone 2012-02-13 21:07:01
+1,所有優點(儘管在視圖中的打印語句對我來說是有罪的)。編號5:返回json數據而不是初始字典的字符串表示。這將使JavaScript更容易。 – Alasdair 2012-02-13 21:21:14
@Alasdair:關於響應的一些事情擾亂了我,但我完全忽略了這個事實,即這應該是一個AJAX響應。哈哈,很好。 – 2012-02-13 21:24:49