我有一个表单,当我提交数据时会抛出内部服务器错误
它说这是由于完整性错误造成的:
IntegrityError at /cookbook/createrecipe/
(1048, "Column 'original_cookbook_id' cannot be null")
奇怪的是,我没有专栏original_cookbook_id - 我所拥有的是original_cookbook,它是食谱模型的外键
这是给出错误的视图:
def createrecipe(request):
print "entering createrecipeview"
if request.method == 'POST':
print "form is a post"
form = RecipeForm(request.POST)
print form.errors
if form.is_valid():
print "form is valid"
form = RecipeForm(initial = {'original_cookbook' : request.user.cookbooks.all()[0]})// this is where the error is being thrown
form.save()
t = loader.get_template('cookbook/create_form.html')
c = RequestContext(request, {
'form': form,
})
data = {
'replace': True,
'form': t.render(c),
'success': True,
}
json = simplejson.dumps(data)
return HttpResponse(json, mimetype='text/plain')
else:
print "form is invalid"
form = RecipeForm(request.POST)
t = loader.get_template('cookbook/create_form.html')
c = RequestContext(request, {
'form':form,
})
data ={
'form': t.render(c),
'success': False,
}
json = simplejson.dumps(data)
return HttpResponse(json, mimetype='text/plain')
我想我可能会以错误的方式宣布original_cookbook
其他任何人都有将_id附加到外键的经验/知道我如何能够解决这个问题
非常感谢
凯蒂
更新
这是我的javascript函数
<script type="text/javascript">
$(document).ready(function(){
function hijack() {
var form = $('form#createrecipeform');
form.each (function(){
this.reset();
});
form.submit(function(e) {
e.preventDefault();
console.log('ajax form submission function called successfully.');
//form = $(this);
console.log(form)
var serialized_form = form.serialize();
$.ajax({ type: "POST",
url: $(this).attr('action'),
data: serialized_form,
success: (function(data) {
console.log('ajax success function called successfully.');
data = $.parseJSON(data);
if (data.success) {
console.log('success');
//right now it is logging success to
//console but nothing else is happening
//what else should happen on data success?
} else {
console.log('failure');
var newForm = data.form;
form.replaceWith(newForm);
hijack();
}
})
});
return false;
});
};
hijack();
});
</script>
答案 0 :(得分:1)
您有一个original_cookbook_id
字段。这就是外键的pk存储在表中的位置。 Django自动附加_id
位。所有错误的意思是该字段设置为NOT NULL,并且您没有为original_cookbook
提供一个值来填充它。
<强>更新强>
本身并没有什么“错误”,但需要注意几点。首先,initial仅设置表单中出现的初始值(显然足够)。但是,如果稍后由用户或某些其他操作将其设置为空,则它仍然为空,即initial
对最终发布的数据没有真正的影响。
你没有发布你的javascript,所以我不能说你如何提交表格,但这也可能是一个问题。如果你没有用AJAX帖子的其余部分提交该字段,无论出于何种原因,实际字段可能设置或不设置为什么并不重要。