POST-запрос не работает (django / rest_framework api)

У меня есть система управления билетами "helpdesk" , работающая на django, и я пытаюсь подключиться к ней через API (rest_framework). На данный момент мне удалось получить GET и PUT запросы, выполняемые через rest_framework APIview. Однако каждый раз, когда я пытаюсь выполнить POST-запрос, я получаю следующую ошибку:

Сообщение об ошибке

Я пробовал делать подобные запросы с самодельными проектами django с более простыми моделями, и все они работали нормально. Есть ли у вас идея о том, что я сделал не так?

Кстати, я работаю со всем этим только около 2 недель, так что, пожалуйста, не вините меня за простые ошибки. Заранее спасибо за помощь! :)

Это мой api_views.py:

from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import generics, viewsets
from rest_framework.pagination import LimitOffsetPagination

from .serializers import DatatablesTicketSerializer
from .models import Ticket

from rest_framework.renderers import JSONRenderer, TemplateHTMLRenderer

@api_view()



def first_api_view(request):
    num_tickets = Ticket.objects.count()
    return Response({'num_tickets': num_tickets})

def all_tickets(request):
    tickets = Ticket.objects.all()
    ticket_serializer = DatatablesTicketSerializer(tickets, many=True)
    return Response(ticket_serializer.data)

class AllTickets(generics.ListAPIView):
    # renderer_classes = [JSONRenderer] #toggle to switch raw json and optimized view

    queryset = Ticket.objects.all()
    serializer_class = DatatablesTicketSerializer

class TicketViewSet(viewsets.ModelViewSet):


    # pagination_class = LimitOffsetPagination # ??
    #authentication_classes = []

    def list(self, request):
        queryset = Ticket.objects.all()
        serializer = DatatablesTicketSerializer(queryset, many=True)
        return Response(serializer.data)

    def retrieve(self, request, pk=None):
        queryset = Ticket.objects.all()
        ticket = get_object_or_404(queryset, pk=pk)
        serializer = DatatablesTicketSerializer(ticket)
        return Response(serializer.data)


    def post(self, request, format=None):
        data = request.data
        serializer = DatatablesTicketSerializerSerializer(data=data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        response = Response()
        response.data = {
            'message': 'Ticket Created Successfully',
            'data': serializer.data
        }
        return response


    queryset = Ticket.objects.all()
    serializer_class = DatatablesTicketSerializer

Это Билет в models.py:

Это сериализатор в serializers.py:

class DatatablesTicketSerializer(serializers.ModelSerializer):
ticket = serializers.SerializerMethodField()
assigned_to = serializers.SerializerMethodField()
submitter = serializers.SerializerMethodField()
created = serializers.SerializerMethodField()
due_date = serializers.SerializerMethodField()
status = serializers.SerializerMethodField()
row_class = serializers.SerializerMethodField()
time_spent = serializers.SerializerMethodField()
queue = serializers.SerializerMethodField()
kbitem = serializers.SerializerMethodField()

class Meta:
    model = Ticket
    #fields = '__all__'
    fields = ('ticket', 'id', 'priority', 'title', 'queue', 'status',
              'created', 'due_date', 'assigned_to', 'submitter', 'row_class',
              'time_spent', 'kbitem')

def get_queue(self, obj):
    return {"title": obj.queue.title, "id": obj.queue.id}

def get_ticket(self, obj):
    return str(obj.id) + " " + obj.ticket

def get_status(self, obj):
    return obj.get_status

def get_created(self, obj):
    return humanize.naturaltime(obj.created)

def get_due_date(self, obj):
    return humanize.naturaltime(obj.due_date)

def get_assigned_to(self, obj):
    if obj.assigned_to:
        if obj.assigned_to.get_full_name():
            return obj.assigned_to.get_full_name()
        elif obj.assigned_to.email:
            return obj.assigned_to.email
        else:
            return obj.assigned_to.username
    else:
        return "None"

def get_submitter(self, obj):
    return obj.submitter_email

def get_time_spent(self, obj):
    return format_time_spent(obj.time_spent)

def get_row_class(self, obj):
    return obj.get_priority_css_class

def get_kbitem(self, obj):
    return obj.kbitem.title if obj.kbitem else ""

и мой urls.py:

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from rest_framework.routers import DefaultRouter

import helpdesk.api_views

router = DefaultRouter()
router.register(r'tickets', helpdesk.api_views.TicketViewSet, basename='Ticket')

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'', include('helpdesk.urls', namespace='helpdesk')),
    path('api/first_api_view/', helpdesk.api_views.first_api_view),
    path('api/all_tickets/', helpdesk.api_views.AllTickets.as_view(), name='AllTickets'),
    path('api/TicketView/', include((router.urls, 'api')))
]
Вернуться на верх