我有一个带有初始数据的大型模型表单集,该表单集由ajax通过单独的渲染模板注入。我还将csrf令牌传递给模板。在检查器中,您还可以看到csrf隐藏输入看起来与同一页上的其他表单完全一样。但是,如果我要提交表单,仍然会遇到csrf错误。
因此完整的界面有效,令牌也被渲染到模板中,只有我不能提交表单,我也不知道为什么
我已经尝试过在没有输入的情况下呈现表单,并通过Ajax注入输入,但是结果是相同的。
由ajax POST请求调用的def render_revolver_table_form(request, product_id, production_step):
context = {}
context['csrfmiddlewaretoken'] = request.POST.dict()['csrfmiddlewaretoken']
template = 'products/product_details/setup_revolver_table.html'
SetupRevolverMapFormSet = modelformset_factory(SetupRevolverMap, exclude=(
'product', 'production_step', 'kanal', 'id'), form=SetupRevolverMapForm)
setup_revolver_maps = SetupRevolverMap.objects.filter(
product=product_id, production_step=production_step).all()
context['formset'] = SetupRevolverMapFormSet(
queryset=setup_revolver_maps.filter(kanal=1))
return render(request, template, context)
<table class="table">
<thead class="thead-dark">
<tr>
<!-- Here is content from the formset -->
</tr>
</thead>
<form id="setup_revolver_form_kanal_1" action="" method="POST">
<input type="hidden" name="csrfmiddlewaretoken" value={{csrfmiddlewaretoken}}" />
{{ formset.management_form }}
<tbody>
<!-- Here is content from the formset -->
</tbody>
</form>
</table>
csrftoken = $('input[name="csrfmiddlewaretoken"]').val()
$.ajax({
url: 'ajax',
type: 'POST',
data: {
csrfmiddlewaretoken: csrftoken
},
success: function (data) {
$('#setup_revolver').append(data))
}
});
<!-- other forms etc. -->
<div id="setup_revolver">