すべて、JavaScript(JQuery)を使用してDjango ModelFormに初期データを追加する
私は私のビューにモデルフォームセットを表示しています。私は、フォームセット内の個々のフォームの追加/削除を処理するために、JQueryダイナミックフォームセットプラグイン[http://code.google.com/p/django-dynamic-formset/]を使用しています。
私は新しいフォームを追加するときに、データベースからモデルを選択してそのフォームに入力するオプションをユーザーに与えたいと考えています。私はDjangoビューへのAJAX呼び出しを使用して、使用可能なモデルを取得します。別の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
+1、すべての良い点(ビューの印刷文は私には罪深い喜びですが)。番号5:初期辞書の文字列表現の代わりにjsonデータを返します。それはjavascriptをはるかに簡単にします。 – Alasdair
@Alasdair:レスポンスの何かが私に迷惑をかけましたが、AJAXレスポンスであると考えられています。ハハ、いいキャッチ。 –