Skip to main content

Mixins for Django Rest Framework Serializer

Project description

https://travis-ci.org/allisson/django-rest-framework-serializer-mixins.svg?branch=master https://codecov.io/gh/allisson/django-rest-framework-serializer-mixins/branch/master/graph/badge.svg https://img.shields.io/pypi/v/djangorestframework-serializer-mixins.svg https://img.shields.io/github/license/allisson/djangorestframework-serializer-mixins.svg https://img.shields.io/pypi/pyversions/djangorestframework-serializer-mixins.svg

Mixins for Django Rest Framework Serializer

How to install

pip install djangorestframework-serializer-mixins

How to use

Assume you have a Post model:

# testapp/models.py
from django.conf import settings
from django.db import models


class Post(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='posts')
    title = models.CharField(max_length=128)
    body = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['-created_at']

Write DynamicPostSerializer with DynamicFieldsMixin:

# testapp/serializers.py
from rest_framework import serializers

from rest_framework_serializer_mixins import DynamicFieldsMixin

from .models import Post


class DynamicPostSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = (
            'body',
            'created_at',
            'id',
            'title',
            'updated_at',
            'user',
        )
        read_only_fields = (
            'id',
            'user',
        )

Now, you can define fields and read_only_field like this:

>>> from django.contrib.auth.models import User
>>> from testapp.models import Post
>>> from testapp.serializers import DynamicPostSerializer
>>> user = User.objects.create_user('user', 'user@email.com', '123456')
>>> post = Post.objects.create(user=user, title='My Title', body='My Body')
>>> data = DynamicPostSerializer(post) # return fields and read_only_fields from Meta
>>> serializer = DynamicPostSerializer(post) # return fields and read_only_fields from Meta
>>> serializer.data
{'body': 'My Body', 'created_at': '2018-02-14T14:15:29.772209Z', 'id': 1, 'title': 'My Title', 'updated_at': '2018-02-14T14:15:29.772312Z', 'user': 1}
>>> serializer = DynamicPostSerializer(post, fields=('title', 'body')) # return only title and body fields
>>> serializer.data
{'body': 'My Body', 'title': 'My Title'}
>>> serializer = DynamicPostSerializer(post, read_only_fields=('title', 'body'), data={'title': 'New Title', 'body': 'New Body'}) # set title and body as read_only_fields
>>> serializer.is_valid()
True
>>> serializer.save()
<Post: My Title>
>>> serializer.data
{'body': 'My Body', 'created_at': '2018-02-14T14:15:29.772209Z', 'id': 1, 'title': 'My Title', 'updated_at': '2018-02-14T14:19:14.838001Z', 'user': 1} # title and body don't change

Project details


Download files

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

Source Distribution

Built Distribution

File details

Details for the file djangorestframework-serializer-mixins-0.1.0.tar.gz.

File metadata

File hashes

Hashes for djangorestframework-serializer-mixins-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d70d4609c1b68302f26ac3aff65c5b9486ac759753acb0f4fa0af35e29bc4ddd
MD5 92026d041924168a9220ca2b18a97d36
BLAKE2b-256 3dab7578d5ce4f0459d83b762f67855179b5ce12bdf4f78597ddcc19a8e8e3cf

See more details on using hashes here.

File details

Details for the file djangorestframework_serializer_mixins-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for djangorestframework_serializer_mixins-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b12e4bd547ee6c8514f9a50c96c59a4a77aa223f78068f2db7dc704ea234f94a
MD5 83b849adc6c01bdffc5c44c29c29b981
BLAKE2b-256 b388047ac2ed9bcaeed1a24c545421d1414314573752be0daa867ec962046796

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page