api.py 891 B

123456789101112131415161718192021222324252627282930
  1. from rest_framework.exceptions import APIException
  2. from rest_framework.serializers import ModelSerializer
  3. WRITE_OPERATIONS = ['create', 'update', 'partial_update', 'delete']
  4. class ServiceUnavailable(APIException):
  5. status_code = 503
  6. default_detail = "Service temporarily unavailable, please try again later."
  7. class WritableSerializerMixin(object):
  8. """
  9. Returns a flat Serializer from the given model suitable for write operations (POST, PUT, PATCH). This is necessary
  10. to allow write operations on objects which utilize nested serializers.
  11. """
  12. def get_serializer_class(self):
  13. class WritableSerializer(ModelSerializer):
  14. class Meta:
  15. model = self.get_queryset().model
  16. fields = '__all__'
  17. if self.action in WRITE_OPERATIONS:
  18. return WritableSerializer
  19. return self.serializer_class