ticket serializer and model update
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 5.1.2 on 2025-02-21 17:35
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ticket', '0010_alter_message_created_at_alter_ticket_created_at_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='ticket',
|
||||
name='content',
|
||||
field=models.TextField(default='', verbose_name='جزيیات تیکت'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -21,6 +21,7 @@ class Ticket(models.Model):
|
||||
('other', 'سایر'),
|
||||
]
|
||||
subject = models.CharField(max_length=255, verbose_name='موضوع')
|
||||
content = models.TextField(verbose_name='جزيیات تیکت')
|
||||
ticket_category = models.CharField(max_length=30, verbose_name='دسته بندی تیکت', choices=CATEGORY_CHOICES)
|
||||
customer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tickets", verbose_name='کاربر')
|
||||
admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_tickets", verbose_name='ادمین')
|
||||
|
||||
@@ -14,3 +14,11 @@ class TicketSerializer(serializers.ModelSerializer):
|
||||
model = Ticket
|
||||
exclude = ('customer', )
|
||||
read_only_fields = ('status', 'admin', )
|
||||
|
||||
|
||||
class TicketListSerializer(serializers.ModelSerializer):
|
||||
admin = ProfileSerializer(read_only=True)
|
||||
class Meta:
|
||||
model = Ticket
|
||||
exclude = ('customer', )
|
||||
read_only_fields = ('status', 'admin', )
|
||||
@@ -11,6 +11,5 @@ urlpatterns = [
|
||||
path('create', TicketCreateView.as_view(), name='ticket-create'),
|
||||
path('', TicketListView.as_view(), name='ticket-list'),
|
||||
path('<int:pk>', TicketDetailView.as_view(), name='ticket-detail'),
|
||||
path('<int:pk>/messages', MessageCreateView.as_view(), name='message-create'),
|
||||
path('<int:pk>/update-status', UpdateTicketStatusView.as_view(), name='update-ticket-status'),
|
||||
path('message/<int:pk>', MessageCreateView.as_view(), name='message-create'),
|
||||
]
|
||||
+33
-9
@@ -2,7 +2,9 @@ from rest_framework import generics, permissions
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from .models import Ticket, Message
|
||||
from .serializers import TicketSerializer, MessageSerializer
|
||||
from .serializers import TicketListSerializer, MessageSerializer, TicketSerializer
|
||||
from utils.pagination import StructurePagination
|
||||
from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes
|
||||
|
||||
class TicketCreateView(generics.CreateAPIView):
|
||||
queryset = Ticket.objects.all()
|
||||
@@ -13,15 +15,37 @@ class TicketCreateView(generics.CreateAPIView):
|
||||
serializer.save(customer=self.request.user)
|
||||
|
||||
|
||||
class TicketListView(generics.ListAPIView):
|
||||
serializer_class = TicketSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
user = self.request.user
|
||||
if user.is_staff:
|
||||
return Ticket.objects.all()
|
||||
return Ticket.objects.filter(customer=user)
|
||||
class TicketListView(APIView):
|
||||
serializer_class = TicketListSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
pagination_class = StructurePagination
|
||||
@extend_schema(
|
||||
parameters=[
|
||||
OpenApiParameter(
|
||||
name="limit",
|
||||
description="لیمیتش",
|
||||
required=False,
|
||||
type=OpenApiTypes.INT,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name="offset",
|
||||
description="افستش",
|
||||
required=False,
|
||||
type=OpenApiTypes.INT,
|
||||
)
|
||||
],
|
||||
responses={
|
||||
200: TicketListSerializer(many=True),
|
||||
404: OpenApiTypes.OBJECT,
|
||||
},
|
||||
)
|
||||
def get(self, request):
|
||||
tickets = Ticket.objects.filter(customer=request.user)
|
||||
paginator = self.pagination_class()
|
||||
paginated_tickets = paginator.paginate_queryset(tickets, request)
|
||||
tickets_ser = self.serializer_class(instance=paginated_tickets, many=True, context={'request': request})
|
||||
return paginator.get_paginated_response(tickets_ser.data)
|
||||
|
||||
|
||||
class TicketDetailView(generics.RetrieveAPIView):
|
||||
|
||||
Reference in New Issue
Block a user