A Django app that provides a serializer that allows You to customize the fieldsaccording to the action provided without the need tocreate other serializers.
Project description
django-rest-action-serializer
A Django app that provides a serializer 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
And then, include the app in your INSTALLED_APPS configuration in django settings:
INSTALLED_APPS = [
...,
...,
'dra'
]
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')
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 + ('stories',),
'exclude': ('url',),
'custom_fields': {
'stories': StorySerializer(
read_only=True,
many=True
)
}
}
}
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 fields you want to display/provide>),
'exclude': (<all the fields you want to remove from the fields attribute>),
'custom_fields': { # All the fields you need to customize
'<field_name>': <Serializer or Serializer Field Class (ex: UserSerializer, SerializerMethodField)>
}
}
}
Contribution
Feel free to contribute to this project :D Just open an issue or a pull-request
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for django-rest-action-serializer-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e7c9b77439c4ee444d0bc73d647cc9cfab8ce599bccbc1004a17c6c1f15e9df |
|
MD5 | 2a105b7d174c7d6cc3370d8e82100013 |
|
BLAKE2b-256 | 3b5057fa2cd3bc2cf05bf2f4a6a20b85e9f2d69aeb5c9f546690c608613fcbd4 |