.. 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:
- Lists of simple (non-object) types, described by other serializer fields.
- Fields that allow values to be a list or individual item of some type.
- Dictionaries of simple and object types.
- Partial dictionaries which include keys specified in a list.
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
- Free software: BSD license
Documentation <https://drf-compound-fields.readthedocs.io>
_Source code <https://github.com/estebistec/drf-compound-fields>
_Issue tracker <https://github.com/estebistec/drf-compound-fields/issues>
_CI server <https://travis-ci.org/estebistec/drf-compound-fields>
_- IRC: no channel but see AUTHORS for individual nicks on freenode.
- Mailing list: None yet, but please log an
issue <https://github.com/estebistec/drf-compound-fields/issues>
_ if you want to have discussions about this package.
History
2.0.0 (2019-09-21)
++++++++++++++++++
- Deprecate Python 2 support
- Fix #29
1.0.0 (2016-02-29)
++++++++++++++++++
- Upgrade ListOrItemField and PartialDictField for django-rest-framework 3.0 and beyond
- Remove ListField and DictField, as they now come with django-rest-framework
0.2.2 (2014-08-10)
++++++++++++++++++
Correct validation behaviors when fields are used in embedded serializers. Also correction to the
list
and dict
type checks for None
values (#15, #16, #18).
- Implement
initialize
and field_from_native
to ensure proper validation in embedded
serializers. - Give the fields distinct
validate
and run_validators
implementations that don't call each
other. - Don't apply the
list
and dict
type checks for None
values.
0.2.1 (2014-04-23)
++++++++++++++++++
Loosen dependency versions
- Remove explicit dependency on Django
- Loosen rest-framework to any version before 3
0.2.0 (2014-03-16)
++++++++++++++++++
- Documentation (#3)
- Collect messages of nested errors, instead of error objects (#12)
- Add ListOrItemField type (#5, #11)
- Fix PartialDictField validation and handling of badly-typed values
- Switch project tests to py.test (#10)
0.1.0 (2014-03-06)
++++++++++++++++++
First PyPI release of rest-framework serializer compound-fields (#1). Provides:
- ListField (#4, #7)
- DictField
- PartialDictField (#8, #9)