Django REST framework light includable serializer fields
Requirements
- Python (2.7, 3.4, 3.5, 3.6)
- Django REST Framework (>=3.0)
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)
| File | Size | Uploaded | |
|---|---|---|---|
| djangorestframework-include-mixin-0.4.tar.gz | 4.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|