estebistec / drf-compound-fields

Django-REST-framework serializer fields for compound types.
BSD 3-Clause "New" or "Revised" License
92 stars 12 forks source link

.. image:: https://badge.fury.io/py/drf-compound-fields.png :target: http://badge.fury.io/py/drf-compound-fields

.. image:: https://travis-ci.org/estebistec/drf-compound-fields.png?branch=master :target: https://travis-ci.org/estebistec/drf-compound-fields

.. image:: https://pypip.in/d/drf-compound-fields/badge.png :target: https://crate.io/packages/drf-compound-fields?version=latest

.. image:: https://coveralls.io/repos/estebistec/drf-compound-fields/badge.png?branch=master :target: https://coveralls.io/r/estebistec/drf-compound-fields?branch=master :alt: Test coverage

Overview

Django-REST-framework <http://www.django-rest-framework.org/> serializer fields <http://www.django-rest-framework.org/api-guide/fields> for compound types. Django-REST-framework provides the ability to deal with multiple objects <http://www.django-rest-framework.org/api-guide/serializers#dealing-with-multiple-objects>_ using the many=True option on serializers. That allows for lists of objects and for fields to be lists of objects.

This package expands on that and provides fields allowing:

A quick example::

from drf_compound_fields.fields import DictField
from drf_compound_fields.fields import ListField
from drf_compound_fields.fields import ListOrItemField
from drf_compound_fields.fields import ListField
from rest_framework import serializers

class EmailContact(serializers.Serializer):
    email = serializers.EmailField()
    verified = serializers.BooleanField()

class UserProfile(serializers.Serializer):
    username = serializers.CharField()
    email_contacts = EmailContact(many=True)  # List of objects: possible with REST-framework alone
    # This is the new stuff:
    skills = ListField(serializers.CharField())  # E.g., ["javascript", "python", "ruby"]
    name = ListOrItemField(serializers.CharField())  # E.g., "Prince" or ["John", "Smith"]
    bookmarks = DictField(serializers.URLField())  # E.g., {"./": "http://slashdot.org"}
    measurements = PartialDictField(included_keys=['height', 'weight'], serializers.IntegerField())

Project info