I'm using JqGrid with Django framework. That's JS:
jQuery("#list").jqGrid({ url:'{% url views.manage.devicesajax %}', datatype: 'json', mtype: 'GET', colNames:['DID', 'UDID', 'Owner', 'Name', 'First seen', 'Last seen'], colModel :[ {name:'did', index:'did', width: 30, searchoptions:{sopt:['eq','ne','bw','cn']}}, {name:'udid', index:'udid', width: 120, editable: true, searchoptions:{sopt:['eq','ne','bw','cn']}}, {name:'d_owner', index:'d_owner', width: 70, editable: true, searchoptions:{sopt:['eq','ne','bw','cn']}}, {name:'d_name', index:'d_name', editable: true, searchoptions:{sopt:['eq','ne','bw','cn']}}, {name:'d_firstseen', index:'d_firstseen', width: 80}, {name:'d_lastseen', index:'d_lastseen', width: 80}], pager: jQuery('#pager'), rowNum:20, rowList:[20,50,100], sortname: 'did', sortorder: "desc", multiselect: true, viewrecords: true, imgpath: 'themes/basic/images', caption: 'Devices list', height: 330, width: 1000, onSelectRow: function(id) { var id = $("#list").getRowData(id).message_id; message_id = id; }, editurl: "{% url views.manage.deviceseditajax %}" });
When I do edit row in JqGrid I get error from editurl:
Forbidden (403) CSRF verification failed. Request aborted.
It's because csrf_token doesn't pass to editurl with the other data. How to add csrf_token to the POST request to editurl ?
This code works perfectly ( complete piece of jqgrid init ):
jQuery("#list").jqGrid({ url:'{% url views.manage.devicesajax %}', datatype: 'json', mtype: 'GET', colNames:['DID', 'UDID', 'Owner', 'Name', 'First seen', 'Last seen'], colModel :[ {name:'did', index:'did', width: 30, searchoptions:{sopt:['eq','ne','bw','cn']}}, {name:'udid', index:'udid', width: 120, editable: true, searchoptions:{sopt:['eq','ne','bw','cn']}}, {name:'d_owner', index:'d_owner', width: 70, editable: true, searchoptions:{sopt:['eq','ne','bw','cn']}}, {name:'d_name', index:'d_name', editable: true, searchoptions:{sopt:['eq','ne','bw','cn']}}, {name:'d_firstseen', index:'d_firstseen', width: 80}, {name:'d_lastseen', index:'d_lastseen', width: 80}], pager: jQuery('#pager'), rowNum:20, rowList:[20,50,100], sortname: 'did', sortorder: "desc", multiselect: true, viewrecords: true, imgpath: 'themes/basic/images', caption: 'Devices list', height: 330, width: 1000, editurl: "{% url views.manage.deviceseditajax %}", }); jQuery("#list").navGrid('#pager',{edit:true,add:true,del:true,search:true}, { closeAfterEdit:true, reloadAfterSubmit:true, closeOnEscape:true, editData: {csrfmiddlewaretoken: '{{ csrf_token }}'} }, { closeAfterAdd:true, reloadAfterSubmit:true, closeOnEscape:true, editData: {csrfmiddlewaretoken: '{{ csrf_token }}'} }, { closeOnEscape:true, delData: {csrfmiddlewaretoken: '{{ csrf_token }}'} }, { caption: "Search", Find: "Find", Reset: "Reset", sopt : ['eq', 'cn'], matchText: " match", rulesText: " rules", closeAfterSearch: true, afterShowSearch: function () { $('#reset_filter1_block').show(); } } );