모두,ajax를 통해 장고 formset 유효성을 검사
인라인 형식 세트가있는 장고보기가 있습니다. 보기에 정상적으로 액세스하고 제출하면 모든 것이 올바르게 작동합니다.
다음[u'ManagementForm data is missing or has been tampered with']
내 코드의 단순화 된 버전입니다 : 내가 AJAX를 통해 액세스 할 때,하지만, 내가 유효성 검사 오류 수 (이것은 다른 페이지 내에서 JQuery와 통화에서 액세스됩니다
def edit_model(request):
model_id = request.GET.get('i', None)
if model_id:
model = ModelClass.objects.get(pk=model_id)
else:
model = ModelClass()
related_model_formset_class = inlineformset_factory(ModelClass, RelatedModelClass, form=RelatedModelForm,
prefix="my_related_models")
if request.method == "GET":
model_form = ModelFormClass(request.POST, instance=model)
related_model_formset = related_model_formset_class(request.POST, instance=model)
if model_form.is_valid() and related_model_formset.is_valid():
model_form.save()
related_model_formset.save()
return HttpResponse("success")
else:
model_form = ModelFormClass(instance=model)
related_model_initial_values = [{"default_value1": 1, "default_value2": 2},
{"default_value1": 1, "default_value2": 2}]
related_model_formset = related_model_formset_class(instance=model, initial=related_model_intial_values,
extra=len(related_model_initial_values))
rendered_form = django.template.loader.render_to_string("my_form.html",
{"form": model_form, "formset": related_model_formset},
context_instance=RequestContext(request))
return HttpResponse(rendered_form, mimetype='text/html')
을하는
function edit_model(model_id) {
var url = "http://www.mydomain.com/edit_model/?i=" + model_id
var edit_model_dialog = $("<div></div>");
$.ajax({
url : url,
type : "GET",
cache : false,
success : function(data) {
var title = "here is a form to edit the model"
edit_model_dialog(data);
edit_model_dialog.dialog({
title : title,
modal : true,
dialogClass: "no-close",
close : function() {
$(this).dialog("destroy");
}
}).dialog('open');
}
})
업데이트 :
inline_formsets와 "my_form.html")와 유사한 구조를 가지고아직 해결하지 못했지만 문제를 조금 좁혔습니다. "edit_model"함수를 트리거하는 버튼은 버튼이 만드는 대화 상자에서 렌더링되는 것과 동일한 유형의 자체 양식 및 형식 세트가있는 다른 페이지에 있습니다. 제출이 대화 상자의 양식에 푸시되면 대화 상자의 페이지와 함께이 상위 페이지의 POST가 트리거 된 것으로 보입니다. 물론 두 페이지의 관리 데이터가 일치하지 않습니다.
그래서 부모 페이지로 전달되는 대화 상자에서 제출되지 않도록하는 방법을 알아 내려고하고 있습니다.
'{{form.management_form}}'이 (가) 포함되어 있습니까? – karthikr
@karthikr - 예, 있습니다. – trubliphone