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')))
]