Skip to main content

A Django app that provides a serializer mixin that allows You to customize the fieldsaccording to the action provided without the need tocreate other serializers.

Project description

Python application codecov

django-rest-action-serializer

A Django app that provides a serializer mixin that allows You to customize the fields according to the action provided without the need to create other serializers.

Installation

Install the package using pip

pip install django-rest-action-serializer

Quickstart

As an example, let's suppose You have a ModelViewSet which You need to display different fields in the list action and in the retrieve action. Without django-rest-action-serializer, You would do:

class SerializerForList(serializers.ModelSerializer):
  
    class Meta:
        model = User
        fields = ('url', 'name', 'age')
    

class SerializerForDetail(SerializerForList):
    stories = StorySerializer(many=True, read_only=True)
    class Meta:
        model = User
        fields = ('name', 'age', 'stories', 'email')
    

class UserModelViewSet(ModelViewSet):
    serializer_class = SerializerForList
    queryset = User.objects.all()
    
    def get_serializer_class(self):
        if self.detail:
            return SerializerForDetail
        
        return super().get_serializer_class()

A lot of code, right? See how It's easy to do it with django-rest-action-serializer

from dra.serializers import ActionSerializer

class UserSerializer(ActionSerializer,
                     serializers.ModelSerializer):
    
    class Meta:
        model = User
        fields = ('url', 'name', 'age',)
        action_fields_map: {
            'retrieve': {
                'fields': fields + (
                    'email',
                    ('stories', StorySerializer(read_only=True, many=True))
                ),
                'exclude': ('url',)
            }
        }
        
class UserModelViewSet(ModelViewSet):
    serializer_class = SerializerForList
    queryset = User.objects.all()

So, all You need to do is to make your serializer class innherit the ActionSerializer from django-rest-action-serializer and set in it's Meta class the action_fields_map attribute, with the following structure:

class Meta:
    ...
    action_fields_map = {
      '<action name (retrieve, list, delete)>': {
        'fields': () # All the field you want to display. If You want a custom field, declare it as a Tuple (field name, field type)
        'exclude': () # All the fields you want to remove from the fields attribute
      }
    }

Contribution

Feel free to contribute to this project :D Just open an issue or a pull-request

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-rest-action-serializer, version 1.1.0
Filename, size File type Python version Upload date Hashes
Filename, size django-rest-action-serializer-1.1.0.tar.gz (5.4 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page