Files
hossein-por-shop/backend/ticket/serializers.py
T
2025-02-28 20:38:22 +03:30

73 lines
2.6 KiB
Python

from rest_framework import serializers
from .models import Ticket, Message, Attachment
from django.utils.timezone import localtime
from account.serializers import ProfileSerializer
class AttachmentSerializer(serializers.ModelSerializer):
file = serializers.FileField(write_only=True)
link = serializers.SerializerMethodField()
class Meta:
model = Attachment
fields = ['id', 'name', 'file', 'link' , 'created_at', 'size']
read_only_fields = ('size', 'name', )
def get_link(self, obj):
request = self.context.get('request')
if request is not None:
return request.build_absolute_uri(obj.file.url)
return obj.file.url
class MessageSerializer(serializers.ModelSerializer):
is_user = serializers.SerializerMethodField(read_only=True)
class Meta:
model = Message
exclude = ('sender', )
extra_kwargs = {'ticket': {'write_only': True}}
def get_is_user(self, obj):
user = self.context['request'].user
return user == obj.sender
class MessageForTicketSerializer(serializers.ModelSerializer):
class Meta:
model = Message
exclude = ('sender', 'ticket')
class TicketSerializer(serializers.ModelSerializer):
status = serializers.SerializerMethodField()
ticket_category = serializers.SerializerMethodField()
messages = MessageSerializer(many=True, read_only=True)
message = MessageForTicketSerializer(write_only=True)
class Meta:
model = Ticket
exclude = ('customer', 'admin')
read_only_fields = ('status',)
def create(self, validated_data):
message = validated_data.pop('message', None)
ticket = super().create(validated_data)
print(f'fck this shit id {ticket.pk}')
message['ticket'] = ticket.pk
message_obj = MessageSerializer(data=message)
if message_obj.is_valid():
message_obj.save(sender=ticket.customer)
return ticket
else:
raise Exception(message_obj.errors)
def get_status(self, obj):
return obj.get_status_display()
def get_ticket_category(self, obj):
return obj.get_ticket_category_display()
class TicketListSerializer(serializers.ModelSerializer):
status = serializers.SerializerMethodField()
ticket_category = serializers.SerializerMethodField()
class Meta:
model = Ticket
exclude = ('customer', 'admin', )
read_only_fields = ('status',)
def get_status(self, obj):
return obj.get_status_display()
def get_ticket_category(self, obj):
return obj.get_ticket_category_display()