Я недавно установил datatable в django, используя django -rest-framework-datatables. Я смог понять отображение данных. Там, где у меня возникла небольшая проблема, это заставить работать кнопки добавления, редактирования и удаления. Текущий код, который у меня есть, как показано ниже, показывает bad request (400)
каждый раз, когда я запускаю любое из этих действий.
$(document).ready(function() {
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
var editor;
editor = new $.fn.dataTable.Editor({
ajax: {
create: {
type: 'POST',
headers: { "X-CSRFTOKEN": csrftoken },
url: '/api/employees/?format=datatables',
},
edit: {
type: 'PUT',
headers: { "X-CSRFTOKEN": csrftoken },
url: 'api/employees/_id_/',
},
remove: {
type: 'DELETE',
headers: { "X-CSRFTOKEN": csrftoken },
url: 'api/employees/_id_/',
}
},
table: '#employeesDataTable',
idSrc: 'id',
fields: [{
label: "fullname:",
name: "fullname",
}, {
label: "gender:",
name: "gender",
type: "select",
options: [
{ label: "male", value: 0 },
{ label: "female", value: 1 },
{ label: "undisclosed", value: 2 },
],
}, {
label: "date of birth:",
name: "date_of_birth",
type: 'datetime',
}, {
label: "permanent address:",
name: "permanent_home_address",
}, {
label: "present address:",
name: "present_home_address",
}, {
label: "email:",
name: "email",
},{
label: "phone number:",
name: "phone_number",
},{
label: "post:",
name: "post",
},{
label: "beat:",
name: "beat",
},{
label: "date of deployment:",
name: "date_of_deployment",
type: 'datetime',
}],
});
/*There are other codes here which handles data display */
var table = $('#employeesDataTable').DataTable( {
ajax: '/api/employees/?format=datatables',
dom: 'Bfrtip',
headers: {'X-CSRFToken': '{{ csrftoken }}'},
processing: true,
serverSide: true,
type: 'POST',
select: true,
"deferRender": true,
buttons: {
buttons: [
...
...
...
...
});
**
Вот мое мнение
**
@method_decorator(login_required, name="dispatch")
class EmployeeViewSet(EditorModelMixin, viewsets.ModelViewSet):
queryset = Employee.objects.all().order_by('fullname')
serializer_class = EmployeeSerializer
filter_backends = (DatatablesFilterBackend,)
filterset_class = EmployeeGlobalFilter
Что может быть не так? И как я могу это решить?