attachment delete route and added the attachment updaloed by fields

This commit is contained in:
Parsa Nazer
2025-02-23 22:06:06 +03:30
parent 21094fa880
commit 72b50e6051
5 changed files with 46 additions and 16 deletions
+4
View File
@@ -59,3 +59,7 @@ class MessageAdmin(ModelAdmin, ImportExportModelAdmin):
def content_display(self, obj):
return obj.content[0:35] + '...'
content_display.short_description = 'محتوای پیام'
@admin.register(Attachment)
class AttachmentAdmin(ModelAdmin, ImportExportModelAdmin):
list_display = ['name', 'uploaded_by']
@@ -0,0 +1,21 @@
# Generated by Django 5.1.2 on 2025-02-23 18:28
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ticket', '0013_attachment_message_attachments_ticket_attachments'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='attachment',
name='uploaded_by',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
),
]
+1
View File
@@ -10,6 +10,7 @@ class Attachment(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
size = models.PositiveIntegerField(null=True, blank=True)
name = models.CharField(max_length=400, null=True, blank=True)
uploaded_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
def __str__(self):
return self.file.name
+7 -13
View File
@@ -1,17 +1,11 @@
from django.urls import path
from .views import (
TicketCreateView,
TicketListView,
TicketDetailView,
MessageCreateView,
UpdateTicketStatusView,
AttachmentUploadView
)
from . import views
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('message/create', MessageCreateView.as_view(), name='message-create'),
path('attachment/create', AttachmentUploadView.as_view(), name='attachment-upload'),
path('create', views.TicketCreateView.as_view(), name='ticket-create'),
path('', views.TicketListView.as_view(), name='ticket-list'),
path('<int:pk>', views.TicketDetailView.as_view(), name='ticket-detail'),
path('message/create', views.MessageCreateView.as_view(), name='message-create'),
path('attachment/create', views.AttachmentUploadView.as_view(), name='attachment-upload'),
path('attachment/delete/<int:pk>', views.AttachmentDeleteView.as_view(), name='attachment-upload'),
]
+12 -2
View File
@@ -1,7 +1,7 @@
from rest_framework import generics, permissions
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Ticket, Message
from .models import Ticket, Message, Attachment
from .serializers import TicketListSerializer, MessageSerializer, TicketSerializer, AttachmentSerializer
from utils.pagination import StructurePagination
from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes
@@ -9,8 +9,18 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework.parsers import MultiPartParser, FormParser
from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiExample, OpenApiTypes, OpenApiResponse
from rest_framework import status
from django.shortcuts import get_object_or_404
class AttachmentDeleteView(APIView):
permission_classes = [IsAuthenticated]
serializer_class = [AttachmentSerializer]
def delete(self, request, pk):
attachment_instance = get_object_or_404(Attachment, pk=pk)
if attachment_instance.uploaded_by == request.user:
attachment_instance.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
return Response({'detail': 'این فایل توسط شما اپلود نشده'})
class AttachmentUploadView(APIView):
permission_classes = [IsAuthenticated]
@@ -24,7 +34,7 @@ class AttachmentUploadView(APIView):
def post(self, request, *args, **kwargs):
serializer = AttachmentSerializer(data=request.data, context={'request': request})
if serializer.is_valid():
serializer.save()
serializer.save(uploaded_by=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)