DataTables с Django Rest Framework Кнопки New/Edit/Delete не работают

Я пытаюсь встроить DataTables Editor в созданный мной Django REST API. В то время как я могу заставить таблицу данных отображаться, кнопки создания/редактирования/удаления не работают. Я хочу пока сосредоточиться только на функции редактирования и надеюсь, что ответ можно применить и к функциям создания/удаления. Каждый раз, когда я выбираю кнопку редактирования и выбираю запись для редактирования, мне возвращается сообщение PUT http://127.0.0.1:8000/dashboard/api/investigator/1 403 (Forbidden) Я могу редактировать запись, но запрос не обрабатывается, что заставляет меня думать, что либо мои таблицы данных настроены неправильно, либо REST API не соединяется с таблицами данных. Может ли кто-нибудь предоставить информацию, если я неправильно настроил таблицу данных?

urls.py

from django.urls import path, include
from . import views

from rest_framework import routers
from .views import StudyList, StudyDetail, InvestigatorView

app_name = 'dashboard'
router = routers.DefaultRouter()
router.register('study', views.StudyView)
router.register('investigator', views.InvestigatorView)
router.register('lead', views.LeadView)
router.register('institution', views.InstitutionView)
router.register('site', views.SiteView)

investigator_list = InvestigatorView.as_view({
    'get': 'list',
    'post': 'create'
})
investigator_detail = InvestigatorView.as_view({
    'get': 'retrieve',
    'PUT': 'update',
    'patch': 'partial_update',
    'delete': 'destroy'
})

urlpatterns = [
    path('', views.datatables, name='datatable'),
    path('investigator/', views.datatables_investigator, name='datatables_investigator'),
    path('api/', include(router.urls)),
    path('api/investigator/', investigator_list, name='InvestigatorList'),
    path('api/investigator/<int:pk>', investigator_detail, name='InvestigatorDetail'),
    path('api/study/', StudyList.as_view(), name='StudyList'),
    path('api/study/<int:pk>/', StudyDetail.as_view(), name='StudyDetail')
]

datatables_investigator.html

serializers.py

from rest_framework import serializers
from rest_framework.serializers import  ReadOnlyField
from dashboard.models import Study, Investigator, Lead, Institution, Site
from drf_writable_nested import WritableNestedModelSerializer

class InstitutionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Institution
        fields = ('name', 'dept')

class LeadSerializer(serializers.ModelSerializer):
    class Meta:
        model = Lead
        fields = ('name_last', 'name_first', 'email', 'title')

class SiteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Site
        fields = ('name', 'lead')

class InvestigatorSerializer(WritableNestedModelSerializer, serializers.ModelSerializer):
    institution = InstitutionSerializer
    class Meta:
        model = Investigator
        fields = ('__all__')
        depth = 1
        datatables_always_serialize = ('id',)

class StudySerializer(WritableNestedModelSerializer, serializers.ModelSerializer):
    investigator = InvestigatorSerializer()
    site = SiteSerializer()
    class Meta:
        model = Study
        fields =  ('id', 'name_full', 'name_short', 'investigator', 'bhrrc_approval', 'start_date', 'end_date', 'enrollment_goal', 'current_enrollment', 'status', 'site',)
        depth = 3
        datatables_always_serialize = ('id',)

views.py

from django.shortcuts import render, redirect
from .models import Study, Investigator, Lead, Institution, Site
from .forms import StudyForm
from django.views.decorators.csrf import csrf_exempt

from rest_framework import viewsets, generics
from rest_framework.permissions import AllowAny
from .serializers import StudySerializer, InvestigatorSerializer, LeadSerializer, InstitutionSerializer, SiteSerializer

# Datatable Views

@csrf_exempt#@csrf_protect#@ensure_csrf_cookie
def datatables(request):
    return render(request, 'datatables.html')

def datatables_investigator(request):
    return render(request, 'datatables_investigator.html')

#API Views
class StudyView(viewsets.ModelViewSet):
    queryset = Study.objects.all()
    serializer_class = StudySerializer

class StudyList(generics.ListCreateAPIView):
    queryset = Study.objects.all()
    serializer_class = StudySerializer

class StudyDetail(generics.ListCreateAPIView):
    queryset = Study.objects.all()
    serializer_class = StudySerializer

class InvestigatorView(viewsets.ModelViewSet):
    queryset = Investigator.objects.all()
    serializer_class = InvestigatorSerializer
    permission_classes = [AllowAny]

    def perform_create(self, serializer):
        serializer.save()
    
    def perform_destroy(self, instance):
        instance.delete()
    
class LeadView(viewsets.ModelViewSet):
    queryset = Lead.objects.all()
    serializer_class = LeadSerializer

class InstitutionView(viewsets.ModelViewSet):
    queryset = Institution.objects.all()
    serializer_class = InstitutionSerializer

class SiteView(viewsets.ModelViewSet):
    queryset = Site.objects.all()
    serializer_class = SiteSerializer

Вернуться на верх