Advertisement
Guest User

Untitled

a guest
Jan 30th, 2015
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. import logging
  2. from rest_framework import serializers
  3.  
  4.  
  5. class GeneralModelSerializer(serializers.ModelSerializer):
  6. """ General model serializer that will serialize a model object. It will return all the model fields.
  7. """
  8. class Meta:
  9. model = None
  10.  
  11. def __init__(self, instance):
  12. self.Meta.model = type(instance)
  13. super(GeneralModelSerializer, self).__init__(instance=instance)
  14.  
  15.  
  16. class FeedSerializer(serializers.ModelSerializer):
  17. target_object = serializers.SerializerMethodField('get_serialized_target_object')
  18.  
  19. SERIALIZERS = {
  20. 'accounts.user': MinimalUserSerializer,
  21. 'posts.post': MinimalPostSerializer
  22. }
  23.  
  24. class Meta:
  25. model = Action
  26. fields = ('id', 'target_object', 'timestamp', 'public')
  27.  
  28. def get_serialized_target_object(self, obj):
  29. """ Serialize a model object
  30. If the object does not have special serializer class use the general one
  31. """
  32. content_type, pk = obj.target_content_type, obj.target_object_id
  33. if content_type and pk:
  34. model_class = content_type.model_class()
  35. try:
  36. instance = model_class.objects.get(pk=pk)
  37. except model_class.DoesNotExist:
  38. return None
  39. app_model = '{0}.{1}'.format(content_type.app_label,content_type.model)
  40. if app_model in self.SERIALIZERS.keys():
  41. serializer = self.SERIALIZERS[app_model]
  42. else:
  43. logger = logging.getLogger(__name__)
  44. logger.error('No secure serializer found for {0}'.format(app_model))
  45. serializer = GeneralModelSerializer
  46. return serializer(instance=instance).data
  47. else:
  48. return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement