我正在尝试将我对POST数据的第一次Ajax调用写入Django视图。在我的生活中,我不能确定我有错误的地方。我相信问题是我无法确定在Django视图中应该在哪里处理json数据转储。提前谢谢!
以下是代码:
Django视图:
if request.method == 'POST' and request.is_ajax():
u = mod.Applicant.objects.get(id = pulled_Applicant_ID)
new_joint_owner = forms_a.AssetJointOwnerForm(request.POST.get('asset_owner'))
if new_joint_owner.is_valid():
new_joint_owner.save(commit=False)
new_joint_owner.applicant= u
new_joint_owner.save()
return HttpResponse(json.dumps({'success': True}), mimetype='application/json')
else:
errors = new_joint_owner.errors
return HttpResponse(json.dumps(errors))
我的jQuery / Ajax:
$(document).on('click', '.joint_owner_submit_btn', function(e){
e.preventDefault(e);
var current_div = $(this).parents('.joint_owner_workspace');
var form_to_hide = $(this).parents('div#content').children('form#form_entry_input');
//var details = $('form#joint_owner_add_form').serializeArray();
$.ajax({
type: 'POST',
url: '/input/assets/joint_owner/',
dataType: 'json',
data: {'asset_owner' : $('form#joint_owner_add_form').serializeArray() },
success: function(){
form_to_hide.slideUp();
current_div.slideDown();
},
fail: function (forms) {
$('form#joint_owner_add_form').html(forms);
console.log(forms);
},
});
return false;
});
答案 0 :(得分:1)
看起来你没有通过CSRF token。您将在django文档中找到一个脚本片段。 您可能还想查看django-restframework。
答案 1 :(得分:1)
我正在阅读你的django视图,我看到一堆语法错误:
new_joint_owner.applicant= u
new_joint_owner.save()here
首先尝试修复它们,如果它们在您的代码中。看看500是否仍然存在。
答案 2 :(得分:1)
嗯,我本身并没有找到答案,但我确实找到了一种方法来解决我的实际问题。我认为我遇到的问题是处理序列化表单的输出。 POST数据如下所示:
<QueryDict: {'asset_owner': ['csrfmiddlewaretoekn=@#$.......&first_name=bob%middlename=""%last_name="smith"']}
所以我将JS / jQuery更改为以下内容:
var data_to_go = {}
data_to_go['first_name'] = $('input#id_first_name').val();
data_to_go['middle_name'] = $('input#id_middle_name').val()
data_to_go['last_name'] = $('input#id_last_name').val()
$.ajax({
type: 'POST',
url: '/input/assets/joint_owner/',
dataType: 'json',
contentType: "application/x-www-form-urlencoded;charset=utf-8",
data: {"asset_owner" : JSON.stringify(data_to_go) },
POST数据现在看起来像:
<QueryDict{'asset_owner' : {"first_name" : "bob", "middle_name": "", "last_name" : "smith"}}
然后我可以通过
简单地将数据保存在视图中 a = json.loads(request.POST.get('asset_owner'))
new_joint_owner = forms_a.AssetJointOwnerForm(a)
我不知道为什么我会在序列化表单中获得crsf-token那样的东西,但是我应该在路上找到它。
答案 3 :(得分:0)
问题是,看起来你正在发送一个json字符串作为整个表单的有效负载。这肯定会让你的表单处理程序混乱。您有两种选择:要么让浏览器端发送普通表单数据,要么将其转换为json并将其反序列化为Python对象,然后再发送到django表单类。