ticket.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from rest_framework import serializers
  2. from tickets.models import Ticket, TicketList
  3. class BaseTicketSerializer(serializers.ModelSerializer):
  4. status = serializers.IntegerField(read_only=True)
  5. def validate(self, data):
  6. user = self.context['request'].user
  7. ticket_list = data.get("ticket_list")
  8. if ticket_list:
  9. if not (user.is_superuser or ticket_list.group in user.groups.all()):
  10. raise serializers.ValidationError("You don't have access to this list.")
  11. return data
  12. class TicketSerializer(BaseTicketSerializer):
  13. note = serializers.CharField(write_only=True, required=False)
  14. json = serializers.CharField(write_only=True, required=False)
  15. ticket_list = serializers.PrimaryKeyRelatedField(queryset=TicketList.objects.all(), write_only=True)
  16. class Meta():
  17. model = Ticket
  18. fields = "__all__"
  19. class TicketDetailSerializer(BaseTicketSerializer):
  20. ticket_type = serializers.IntegerField(read_only=True)
  21. available_statuses = serializers.SerializerMethodField()
  22. def get_available_statuses(self, obj):
  23. return obj.get_available_statuses()
  24. class Meta():
  25. model = Ticket
  26. fields = "__all__"
  27. class TicketStatusSerializer(BaseTicketSerializer):
  28. status = serializers.IntegerField(read_only=False, required=True)
  29. available_statuses = serializers.SerializerMethodField()
  30. def get_available_statuses(self, obj):
  31. return obj.get_available_statuses()
  32. def validate_status(self, status):
  33. valid_statuses = self.get_available_statuses(self.instance)
  34. if not valid_statuses or status not in valid_statuses:
  35. raise serializers.ValidationError("Invalid value for the status field")
  36. return status
  37. class Meta():
  38. model = Ticket
  39. fields = ["id", "available_statuses", "status"]