Create: api prototype

This commit is contained in:
Stepan Zhukovsky 2023-08-08 14:42:57 +09:00
parent 3b1b42d483
commit 3e969de57f
3 changed files with 56 additions and 2 deletions

View File

@ -0,0 +1,24 @@
from rest_framework import serializers
from .models import Archive, Ticket
class ArchiveUploadSerializer(serializers.ModelSerializer):
ticket_number = serializers.ReadOnlyField(source='ticket.number')
class Meta:
model = Archive
fields = ['file', 'ticket', 'ticket_number']
def to_internal_value(self, data):
try:
ticket = Ticket.objects.get(number=data['ticket'])
data['ticket'] = ticket.id
return super().to_internal_value(data)
except Exception:
return super().to_internal_value(data)
def to_representation(self, instance):
data = super().to_representation(instance)
data['ticket'] = data.pop('ticket_number')
return data

View File

@ -1,8 +1,14 @@
from django.urls import path from django.urls import path, include
from rest_framework import routers
from . import views from . import views
app_name = 'collector' app_name = 'collector'
router = routers.DefaultRouter()
router.register(r'archives', views.ArchiveUploadViewSet)
urlpatterns = [ urlpatterns = [
# █░█░█ █▀▀ █▄▄ # █░█░█ █▀▀ █▄▄
@ -64,4 +70,12 @@ urlpatterns = [
views.DeleteTicketHandler.as_view(), views.DeleteTicketHandler.as_view(),
name='ajax_delete_ticket' name='ajax_delete_ticket'
), ),
# ▄▀█ █▀█ █
# █▀█ █▀▀ █
# -- -- --
# CREATE:
path('api/v1/', include(router.urls))
] ]

View File

@ -7,12 +7,17 @@ from django.urls import reverse_lazy
from django.db.models import Q from django.db.models import Q
from rest_framework import status from rest_framework import status
# from rest_framework.response import Response from rest_framework.parsers import FormParser, MultiPartParser
from rest_framework import mixins
from rest_framework.viewsets import GenericViewSet
from .models import Archive, Ticket from .models import Archive, Ticket
from .forms import TicketForm from .forms import TicketForm
from .utils import PageTitleViewMixin, is_ajax from .utils import PageTitleViewMixin, is_ajax
from .serializers import ArchiveUploadSerializer
class ArchiveHandlerView(LoginRequiredMixin, SingleObjectMixin, generic.View): class ArchiveHandlerView(LoginRequiredMixin, SingleObjectMixin, generic.View):
model = Archive model = Archive
@ -54,6 +59,7 @@ class UpdateTicket(LoginRequiredMixin, PageTitleViewMixin, generic.UpdateView):
return f'{self.title} - {self.kwargs.get("ticket", "update")}' return f'{self.title} - {self.kwargs.get("ticket", "update")}'
def form_valid(self, form): def form_valid(self, form):
print(self.request.user)
form.instance.user = self.request.user form.instance.user = self.request.user
return super().form_valid(form) return super().form_valid(form)
@ -164,3 +170,13 @@ class DeleteTicketHandler(SingleObjectMixin, generic.View):
{'error': 'header XMLHttpRequest is required'}, {'error': 'header XMLHttpRequest is required'},
status=status.HTTP_406_NOT_ACCEPTABLE status=status.HTTP_406_NOT_ACCEPTABLE
) )
class ArchiveUploadViewSet(mixins.CreateModelMixin, GenericViewSet):
queryset = Archive.objects.order_by('-time_create')
serializer_class = ArchiveUploadSerializer
parser_classes = (MultiPartParser, FormParser)
# permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def perform_create(self, serializer):
serializer.save(user=self.request.user)