Django: кнопки создания, редактирования и удаления, вызывающие неверный запрос в таблицах данных - PullRequest
0 голосов
/ 12 июля 2020

Я недавно установил 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

Что может быть не так? И как я могу это решить?

...