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

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page