Skip to main content

Django REST framework light includable serializer fields

Requirements

Usage

serializers.py

class GroupSerializer(SerializerIncludeMixin, ModelSerializer):
    @classproperty  # django.utils.decorators
    def extra_objects(cls):
        return {
            'users': UserSerializer(source='user_set', many=True),
            'active_users': UserSerializer(many=True),
        }

    class Meta:
        model = Group
        fields = ('id', 'name')

views.py

class GroupViewSet(QueryOptimizerMixin, ReadOnlyModelViewSet):
    """
    Groups.

    list:
    Available includable objects:

      * users - all users;
      * active_users - only active users.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer
    select_related = {}
    prefetch_related = {
        'users': 'user_set',
        'active_users': Prefetch(
            lookup='user_set',
            queryset=User.objects.filter(is_active=True),
            to_attr='active_users',
        ),
    }

And now we can to do that:

client = APIClient()
response = client.get(  # GET /groups/?include[]=active_users
    '/groups/',
    data=[
        ('include[]', 'active_users'),
    ],
)

This will make only 2 query:

  • all groups
  • prefetch only active users

Documentation

rest_framework_include_mixin.SerializerIncludeMixin

Used in any serializer to automatically replace and add serializer fields.

extra_objects class variable

key:str - value from GET parameter include[]. For example, profile for /users/?include[]=profile.

value:Serializer - any field serializer.

Example:

class UserSerializer(SerializerIncludeMixin, ModelSerializer):
    extra_objects =  {
        'profile': ProfileSerializer(),
        'groups': GroupSerializer(many=True),
    }

    class Meta:
        model = User
        fields = ('id', 'profile_id')
GET parameters Result serializer fields
'id': IntegerField(), 'profile_id': IntegerField()
?include[]=profile 'id': IntegerField(), 'profile': ProfileSerializer()
?include[]=groups 'id': IntegerField(), 'profile_id': IntegerField(), 'groups': GroupSerializer(many=True)
?include[]=profile&include[]=groups 'id': IntegerField(), 'profile': ProfileSerializer(), 'groups': GroupSerializer(many=True)

Note: standard serializer fields with/without _id will be replaced to field from extra_objects.

For ?include[]=profile: profile and profile_id will be replaced to profile from extra_objects.

rest_framework_include_mixin.QueryOptimizerMixin

Used with ModelViewSet to optimize database queries.

select_related class variable

key:str - value from GET parameter include[].

value:str - field name that can be passed to select_related (model manager function).

prefetch_related class variable

key:str - value from GET parameter include[].

value:Union[str, Prefetch] - field name or Prefetch object that can be passed to prefetch_related (model manager function).

Metadata

Release files for djangorestframework-include-mixin 0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for djangorestframework-include-mixin 0.4
File Size Uploaded
djangorestframework-include-mixin-0.4.tar.gz 4.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for djangorestframework-include-mixin 0.4
File Interpreter ABI Platform
djangorestframework_include_mixin-0.4-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 9.6 kB

Release files / djangorestframework-include-mixin-0.4.tar.gz

Download URL djangorestframework-include-mixin-0.4.tar.gz
Size 4.5 kB
Tags Source
SHA-256 checksum
How to use checksums
a71d29fe9fdaf8a2dcd8ed4b9caeb1014d3daff8c9f6639935e74c5c1d0c1d8c
BLAKE2b-256 checksum
How to use checksums
32fa3e6135561803d87c1cb26ae8aff8b0d61bf0d8daf739b9011079a4b0cf68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/2.7.14

Release files / djangorestframework_include_mixin-0.4-py2.py3-none-any.whl

Download URL djangorestframework_include_mixin-0.4-py2.py3-none-any.whl
Size 5.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
cb4f0a57ee523e5f1f6dcd049ae8db838b63fdf03670720b1a4bc43e585b8204
BLAKE2b-256 checksum
How to use checksums
cad75ed591654185b0683b9bfc8436997d532276dcd3eff0e9de02a68d5d7bad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/2.7.14

Release history Release notifications | RSS feed

This release

0.4 This release

2 release files

0.3

3 release files

0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page