From 98cc8210990e3307a89d745acbbc2bcf6c665645 Mon Sep 17 00:00:00 2001 From: Serhiy Voyt Date: Tue, 6 May 2014 20:34:30 +0300 Subject: Extended test with case of saveing model with blank not null field. --- rest_framework/tests/test_serializer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py index e688c823..d770c637 100644 --- a/rest_framework/tests/test_serializer.py +++ b/rest_framework/tests/test_serializer.py @@ -1236,6 +1236,8 @@ class BlankFieldTests(TestCase): def test_create_model_null_field(self): serializer = self.model_serializer_class(data={'title': None}) self.assertEqual(serializer.is_valid(), True) + serializer.save() + self.assertTrue(serializer.object.pk is not None) def test_create_not_blank_field(self): """ -- cgit v1.2.3 From 1ce1f387b031c368e0ad315964b78f93d6be9a19 Mon Sep 17 00:00:00 2001 From: Serhiy Voyt Date: Tue, 6 May 2014 21:57:25 +0300 Subject: Charfied from_native method returns default instead of None. Updated tests. --- rest_framework/fields.py | 9 ++++++++- rest_framework/tests/models.py | 4 +++- rest_framework/tests/test_serializer.py | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 8cdc5551..7858d951 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -469,8 +469,15 @@ class CharField(WritableField): self.validators.append(validators.MaxLengthValidator(max_length)) def from_native(self, value): - if isinstance(value, six.string_types) or value is None: + if isinstance(value, six.string_types): return value + + if value is None: + if self.default: + return self.default + else: + value + return smart_text(value) diff --git a/rest_framework/tests/models.py b/rest_framework/tests/models.py index e171d3bd..fba3f8f7 100644 --- a/rest_framework/tests/models.py +++ b/rest_framework/tests/models.py @@ -105,6 +105,7 @@ class Album(RESTFrameworkModel): title = models.CharField(max_length=100, unique=True) ref = models.CharField(max_length=10, unique=True, null=True, blank=True) + class Photo(RESTFrameworkModel): description = models.TextField() album = models.ForeignKey(Album) @@ -112,7 +113,8 @@ class Photo(RESTFrameworkModel): # Model for issue #324 class BlankFieldModel(RESTFrameworkModel): - title = models.CharField(max_length=100, blank=True, null=False) + title = models.CharField(max_length=100, blank=True, null=False, + default="title") # Model for issue #380 diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py index d770c637..82e1a89c 100644 --- a/rest_framework/tests/test_serializer.py +++ b/rest_framework/tests/test_serializer.py @@ -1238,6 +1238,7 @@ class BlankFieldTests(TestCase): self.assertEqual(serializer.is_valid(), True) serializer.save() self.assertTrue(serializer.object.pk is not None) + self.assertEqual(serializer.object.title, 'title') def test_create_not_blank_field(self): """ -- cgit v1.2.3 From 27be31bd8a58fc4f37b966c36d1cebe83b80ebea Mon Sep 17 00:00:00 2001 From: Serhiy Voyt Date: Wed, 7 May 2014 18:37:08 +0300 Subject: In case of None value returns empty string instead of NoneType. --- rest_framework/fields.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 7858d951..aed38d5e 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -473,10 +473,7 @@ class CharField(WritableField): return value if value is None: - if self.default: - return self.default - else: - value + return '' return smart_text(value) -- cgit v1.2.3 From 4e6a21344fd1fda28d1d63c5aa697fac5e9f8029 Mon Sep 17 00:00:00 2001 From: Serhiy Voyt Date: Wed, 7 May 2014 18:42:02 +0300 Subject: Fixed test. --- rest_framework/tests/test_serializer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py index 82e1a89c..91248ce7 100644 --- a/rest_framework/tests/test_serializer.py +++ b/rest_framework/tests/test_serializer.py @@ -1237,8 +1237,8 @@ class BlankFieldTests(TestCase): serializer = self.model_serializer_class(data={'title': None}) self.assertEqual(serializer.is_valid(), True) serializer.save() - self.assertTrue(serializer.object.pk is not None) - self.assertEqual(serializer.object.title, 'title') + self.assertIsNot(serializer.object.pk, None) + self.assertEqual(serializer.object.title, '') def test_create_not_blank_field(self): """ -- cgit v1.2.3 From 544183f64ff115398ae62c916d58f8369263d47c Mon Sep 17 00:00:00 2001 From: TankorSmash Date: Mon, 16 Jun 2014 19:13:02 -0400 Subject: typo in the docs --- rest_framework/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 86e8fd9d..d5c8134b 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -187,7 +187,7 @@ class Field(object): def field_to_native(self, obj, field_name): """ - Given and object and a field name, returns the value that should be + Given an object and a field name, returns the value that should be serialized for that field. """ if obj is None: -- cgit v1.2.3 From c1426d1078a40de521aeec6c4099538efa6b24c7 Mon Sep 17 00:00:00 2001 From: Chibisov Gennady Date: Thu, 26 Jun 2014 23:29:00 +0400 Subject: Fixes #1651. Add link to drf-extensions nested routers to docs --- docs/api-guide/routers.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/api-guide/routers.md b/docs/api-guide/routers.md index 7efc140a..64f05af3 100644 --- a/docs/api-guide/routers.md +++ b/docs/api-guide/routers.md @@ -179,7 +179,16 @@ The [wq.db package][wq.db] provides an advanced [Router][wq.db-router] class (an app.router.register_model(MyModel) +## DRF-extensions + +The [`DRF-extensions` package][drf-extensions] provides [routers][drf-extensions-routers] for creating [nested viewsets][drf-extensions-nested-viewsets], [collection level controllers][drf-extensions-collection-level-controllers] with [customizable endpoint names][drf-extensions-customizable-endpoint-names]. + [cite]: http://guides.rubyonrails.org/routing.html [drf-nested-routers]: https://github.com/alanjds/drf-nested-routers [wq.db]: http://wq.io/wq.db [wq.db-router]: http://wq.io/docs/app.py +[drf-extensions]: http://chibisov.github.io/drf-extensions/docs/ +[drf-extensions-routers]: http://chibisov.github.io/drf-extensions/docs/#routers +[drf-extensions-nested-viewsets]: http://chibisov.github.io/drf-extensions/docs/#nested-routes +[drf-extensions-collection-level-controllers]: http://chibisov.github.io/drf-extensions/docs/#collection-level-controllers +[drf-extensions-customizable-endpoint-names]: http://chibisov.github.io/drf-extensions/docs/#controller-endpoint-name \ No newline at end of file -- cgit v1.2.3 From 91eabd54bbc42e8a2540db2ff070097db7a0f4a0 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Tue, 1 Jul 2014 14:34:23 +0100 Subject: Docs tweak --- docs/api-guide/filtering.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md index 6a8a267b..ec5ab61f 100644 --- a/docs/api-guide/filtering.md +++ b/docs/api-guide/filtering.md @@ -199,8 +199,7 @@ This enables us to make queries like: http://example.com/api/products?manufacturer__name=foo -This is nice, but it shows underlying model structure in REST API, which may -be undesired, but you can use: +This is nice, but it exposes the Django's double underscore convention as part of the API. If you instead want to explicitly name the filter argument you can instead explicitly include it on the `FilterSet` class: import django_filters from myapp.models import Product @@ -208,7 +207,6 @@ be undesired, but you can use: from rest_framework import generics class ProductFilter(django_filters.FilterSet): - manufacturer = django_filters.CharFilter(name="manufacturer__name") class Meta: -- cgit v1.2.3 From a5e628bf8b4cf26227d4ee0cbef45049aa0632d5 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Mon, 7 Jul 2014 09:42:50 +0100 Subject: Kick travis --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 73e4b13f..da5f27ae 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,7 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + [build-status-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.png?branch=master [travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master [twitter]: https://twitter.com/_tomchristie -- cgit v1.2.3 From b51901812596aa478cc8cb1046e42049214bc9ff Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Mon, 7 Jul 2014 09:51:23 +0100 Subject: Docs on object level permissions and filters. Closes #1683 --- docs/api-guide/permissions.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/api-guide/permissions.md b/docs/api-guide/permissions.md index 50f669a2..c44b22de 100644 --- a/docs/api-guide/permissions.md +++ b/docs/api-guide/permissions.md @@ -36,6 +36,12 @@ For example: self.check_object_permissions(self.request, obj) return obj +#### Limitations of object level permissions + +For performance reasons the generic views will not automatically apply object level permissions to each instance in a queryset when returning a list of objects. + +Often when you're using object level permissions you'll also want to [filter the queryset][filtering] appropriately, to ensure that users only have visibility onto instances that they are permitted to view. + ## Setting the permission policy The default permission policy may be set globally, using the `DEFAULT_PERMISSION_CLASSES` setting. For example. @@ -237,6 +243,7 @@ The [REST Condition][rest-condition] package is another extension for building c [cite]: https://developer.apple.com/library/mac/#documentation/security/Conceptual/AuthenticationAndAuthorizationGuide/Authorization/Authorization.html [authentication]: authentication.md [throttling]: throttling.md +[filtering]: filtering.md [contribauth]: https://docs.djangoproject.com/en/1.0/topics/auth/#permissions [objectpermissions]: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#handling-object-permissions [guardian]: https://github.com/lukaszb/django-guardian -- cgit v1.2.3 From dd2e950cde5fc7078303925fa936e59ea4fe363b Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Tue, 15 Jul 2014 15:02:09 +0100 Subject: Fusion ads --- docs/template.html | 24 +++++++++++++++++++----- mkdocs.py | 4 ++-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/docs/template.html b/docs/template.html index a397d067..6009b151 100644 --- a/docs/template.html +++ b/docs/template.html @@ -33,6 +33,21 @@ })(); + @@ -169,11 +184,9 @@
@@ -199,6 +212,7 @@ + """) else: output = output.replace('{{ ad_block }}', '') -- cgit v1.2.3 From 680fabe9dd2307014862beb1c2d77625e808788d Mon Sep 17 00:00:00 2001 From: Dave King Date: Thu, 17 Jul 2014 11:46:59 +0100 Subject: Update fields.md obj.__class__ will return the actual Class object, we want to serialise a string (accessed with obj.__class__.__name__)--- docs/api-guide/fields.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md index 58dbf977..6d1adcb0 100644 --- a/docs/api-guide/fields.md +++ b/docs/api-guide/fields.md @@ -347,7 +347,7 @@ As an example, let's create a field that can be used represent the class name of """ Serialize the object's class name. """ - return obj.__class__ + return obj.__class__.__name__ # Third party packages -- cgit v1.2.3 From 6bf0f81b0b911eb3d2bf3dd3fbaaf44570a58b28 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Thu, 17 Jul 2014 13:41:19 +0100 Subject: Kickstarter note on front page --- docs/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/index.md b/docs/index.md index 2a4ad885..a870a828 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,6 +9,10 @@ --- +**Project announcement:** We are currently running a Kickstart campaign to help fund the development of Django REST framework 3. If you want to help make sustainable open source development please [check out the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3), and consider funding us! + +--- +

2.0 Announcement
  • 2.2 Announcement
  • 2.3 Announcement
  • +
  • Kickstarter Announcement
  • Release Notes
  • Credits
  • diff --git a/docs/topics/kickstarter-announcement.md b/docs/topics/kickstarter-announcement.md new file mode 100644 index 00000000..98cf12e3 --- /dev/null +++ b/docs/topics/kickstarter-announcement.md @@ -0,0 +1,31 @@ +# Kickstarting Django REST framework 3 + +--- + + + +--- + +In order to continue to drive the project forward, I'm launching a Kickstarter campaign to help fund the development of a major new release - Django REST framework 3. + +## Project details + +This new release will allow us to comprehensively address some of the shortcomings of the framework, and will aim to include the following: + +* Faster, simpler and easier-to-use serializers. +* An alternative admin-style interface for the browsable API. +* Search and filtering controls made accessible in the browsable API. +* Alternative API pagination styles. +* Documentation around API versioning. +* Triage of outstanding tickets. +* Improving the ongoing quality and maintainability of the project. + +Full details are available now on the [project page](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3). + +If you're interested in helping make sustainable open source development a reality please [visit the Kickstarter page](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) and consider funding the project. + +I can't wait to see where this takes us! + +Many thanks to everyone for your support so far, + + Tom Christie :) -- cgit v1.2.3 From 550243fd2649195f6433bf07354880d86bfedde9 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 18 Jul 2014 11:51:48 +0100 Subject: Beef up the kickstarter announcement --- docs/index.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index c1f60097..c07a5645 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,7 +9,11 @@ --- -**Project announcement:** We are currently running a Kickstarter campaign to help fund the development of Django REST framework 3. If you want to help make sustainable open source development please [check out the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3), and consider funding us! +#### Django REST framework 3 - Kickstarter announcement! + +We are currently running a Kickstarter campaign to help fund the development of Django REST framework 3. + +If you want to help make sustainable open source development **please [check out the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) and consider funding us.** --- -- cgit v1.2.3 From ab34ddcf2f734ca5f1a6e43ff1280283b9a171e5 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 18 Jul 2014 11:53:23 +0100 Subject: Typo --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index c07a5645..5b5a62eb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -13,7 +13,7 @@ We are currently running a Kickstarter campaign to help fund the development of Django REST framework 3. -If you want to help make sustainable open source development **please [check out the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) and consider funding us.** +If you want to help make sustainable open-source development a reality **please [check out the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) and consider funding us.** --- -- cgit v1.2.3 From 4324f504375f7f118297fa9694bd6cee56bc050e Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 18 Jul 2014 11:54:51 +0100 Subject: Phrasing tweak --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 5b5a62eb..d9c686c4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -13,7 +13,7 @@ We are currently running a Kickstarter campaign to help fund the development of Django REST framework 3. -If you want to help make sustainable open-source development a reality **please [check out the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) and consider funding us.** +If you want to help drive sustainable open-source development **please [check out the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) and consider funding us.** --- -- cgit v1.2.3 From 0782640415e665caef7b76b349a7d1e59dec25df Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 18 Jul 2014 13:19:28 +0100 Subject: Kickstarter announcement --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index da5f27ae..0f81f3ae 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,16 @@ **Note**: Full documentation for the project is available at [http://www.django-rest-framework.org][docs]. +--- + +#### Django REST framework 3 - Kickstarter announcement! + +We are currently running a Kickstarter campaign to help fund the development of Django REST framework 3. + +If you want to help drive sustainable open-source development **please [check out the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) and consider funding us.** + +--- + # Overview Django REST framework is a powerful and flexible toolkit that makes it easy to build Web APIs. -- cgit v1.2.3 From d059b6d6c391099ded2abd8fa0cf06821f971a5e Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 18 Jul 2014 13:20:03 +0100 Subject: Change positioning of announcement. --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 0f81f3ae..1d7eefcf 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,3 @@ -# Django REST framework - -[![build-status-image]][travis] - -**Awesome web-browseable Web APIs.** - -**Note**: Full documentation for the project is available at [http://www.django-rest-framework.org][docs]. - --- #### Django REST framework 3 - Kickstarter announcement! @@ -16,6 +8,14 @@ If you want to help drive sustainable open-source development **please [check ou --- +# Django REST framework + +[![build-status-image]][travis] + +**Awesome web-browseable Web APIs.** + +**Note**: Full documentation for the project is available at [http://www.django-rest-framework.org][docs]. + # Overview Django REST framework is a powerful and flexible toolkit that makes it easy to build Web APIs. -- cgit v1.2.3 From 30bf55bf8da2be8ae0228c8d0dee3a523ae5eba5 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 18 Jul 2014 13:20:55 +0100 Subject: Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d7eefcf..e58ec8ae 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ We are currently running a Kickstarter campaign to help fund the development of Django REST framework 3. -If you want to help drive sustainable open-source development **please [check out the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) and consider funding us.** +If you want to help drive sustainable open-source development forward **please [cconsider funding the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3).** --- -- cgit v1.2.3 From 591e67f5405d6a8f59b2e52b1050752faa906c52 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 18 Jul 2014 13:21:03 +0100 Subject: Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e58ec8ae..a1bfa91d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ We are currently running a Kickstarter campaign to help fund the development of Django REST framework 3. -If you want to help drive sustainable open-source development forward **please [cconsider funding the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3).** +If you want to help drive sustainable open-source development forward **please [consider funding the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3).** --- -- cgit v1.2.3 From bf7371fbc5a05b359cee03b8cbadd8229e563070 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 18 Jul 2014 13:21:19 +0100 Subject: Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1bfa91d..e0d421c0 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ We are currently running a Kickstarter campaign to help fund the development of Django REST framework 3. -If you want to help drive sustainable open-source development forward **please [consider funding the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3).** +If you want to help drive sustainable open-source development forward **please consider funding [the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3).** --- -- cgit v1.2.3 From 08772799d466907a16f02aec990396736be3c022 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 18 Jul 2014 13:22:29 +0100 Subject: Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e0d421c0..eea002b4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ We are currently running a Kickstarter campaign to help fund the development of Django REST framework 3. -If you want to help drive sustainable open-source development forward **please consider funding [the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3).** +If you want to help drive sustainable open-source development forward, then **please check out [the Kickstarter project](https://www.kickstarter.com/projects/tomchristie/django-rest-framework-3) and consider funding us.** --- -- cgit v1.2.3 From 81d15aa9be72ac8b805fc728bd86f930ff1b17e7 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Sun, 20 Jul 2014 15:45:45 +0100 Subject: Add link to drf-extra-fields. Closes #1698 --- docs/api-guide/fields.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md index 58dbf977..cebfaac9 100644 --- a/docs/api-guide/fields.md +++ b/docs/api-guide/fields.md @@ -357,9 +357,16 @@ The following third party packages are also available. The [drf-compound-fields][drf-compound-fields] package provides "compound" serializer fields, such as lists of simple values, which can be described by other fields rather than serializers with the `many=True` option. Also provided are fields for typed dictionaries and values that can be either a specific type or a list of items of that type. +## DRF Extra Fields + +The [drf-extra-fields][drf-extra-fields] package provides extra serializer fields for REST framework, including `Base64ImageField` and `PointField` classes. + + + [cite]: https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms.Form.cleaned_data [FILE_UPLOAD_HANDLERS]: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-FILE_UPLOAD_HANDLERS [ecma262]: http://ecma-international.org/ecma-262/5.1/#sec-15.9.1.15 [strftime]: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior [iso8601]: http://www.w3.org/TR/NOTE-datetime [drf-compound-fields]: http://drf-compound-fields.readthedocs.org +[drf-extra-fields]: https://github.com/Hipo/drf-extra-fields \ No newline at end of file -- cgit v1.2.3