Mixins for Django Rest Framework Serializer
Project description
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
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
Built Distribution
File details
Details for the file djangorestframework-serializer-mixins-0.1.0.tar.gz
.
File metadata
- Download URL: djangorestframework-serializer-mixins-0.1.0.tar.gz
- Upload date:
- Size: 4.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d70d4609c1b68302f26ac3aff65c5b9486ac759753acb0f4fa0af35e29bc4ddd |
|
MD5 | 92026d041924168a9220ca2b18a97d36 |
|
BLAKE2b-256 | 3dab7578d5ce4f0459d83b762f67855179b5ce12bdf4f78597ddcc19a8e8e3cf |
File details
Details for the file djangorestframework_serializer_mixins-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: djangorestframework_serializer_mixins-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b12e4bd547ee6c8514f9a50c96c59a4a77aa223f78068f2db7dc704ea234f94a |
|
MD5 | 83b849adc6c01bdffc5c44c29c29b981 |
|
BLAKE2b-256 | b388047ac2ed9bcaeed1a24c545421d1414314573752be0daa867ec962046796 |