From 53a1205dd03703e6f93bbf7bcb2686c617638242 Mon Sep 17 00:00:00 2001 From: Vadim Date: Fri, 24 Jun 2016 15:04:18 +0300 Subject: [PATCH 01/58] Fix partial update for the ListSerializer. --- rest_framework/serializers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 3fcc85c3b..9f06f5a4f 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -533,6 +533,10 @@ class ListSerializer(BaseSerializer): super(ListSerializer, self).__init__(*args, **kwargs) self.child.bind(field_name='', parent=self) + def bind(self, field_name, parent): + super(ListSerializer, self).bind(field_name, parent) + self.partial = self.parent.partial + def get_initial(self): if hasattr(self, 'initial_data'): return self.to_representation(self.initial_data) @@ -584,6 +588,9 @@ class ListSerializer(BaseSerializer): }) if not self.allow_empty and len(data) == 0: + if self.partial: + raise SkipField() + message = self.error_messages['empty'] raise ValidationError({ api_settings.NON_FIELD_ERRORS_KEY: [message] From c0f4dfd8f33819dab001b5b23da148cc7830b1ba Mon Sep 17 00:00:00 2001 From: Vadim Date: Wed, 29 Jun 2016 09:48:31 +0300 Subject: [PATCH 02/58] Add tests for the ListSerializer for the TestSerializerPartialUsage. Additional fix partial update for the ListSerializer. --- rest_framework/serializers.py | 2 +- tests/test_serializer_lists.py | 214 +++++++++++++++++++++++++++++++++ 2 files changed, 215 insertions(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 9f06f5a4f..c4057dc46 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -588,7 +588,7 @@ class ListSerializer(BaseSerializer): }) if not self.allow_empty and len(data) == 0: - if self.partial: + if self.parent and self.partial: raise SkipField() message = self.error_messages['empty'] diff --git a/tests/test_serializer_lists.py b/tests/test_serializer_lists.py index 607ddba04..740197c28 100644 --- a/tests/test_serializer_lists.py +++ b/tests/test_serializer_lists.py @@ -318,3 +318,217 @@ class TestSerializerPartialUsage: assert serializer.is_valid() assert serializer.validated_data == {} assert serializer.errors == {} + + def test_allow_empty_true(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + instance = [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + + serializer = ListSerializer(instance, data=[], partial=True, many=True) + assert serializer.is_valid() + assert serializer.validated_data == [] + assert serializer.errors == [] + + def test_update_allow_empty_true(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + instance = [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + input_data = [{'update_field': 31}, {'update_field': 41}] + updated_data_list = [ + {'update_field': 31, 'store_field': 12}, + {'update_field': 41, 'store_field': 22}, + ] + + serializer = ListSerializer( + instance, data=input_data, partial=True, many=True) + assert serializer.is_valid() + + for index, data in enumerate(serializer.validated_data): + for key, value in data.items(): + assert value == updated_data_list[index][key] + + assert serializer.errors == [] + + def test_allow_empty_false(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + instance = [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + + serializer = ListSerializer( + instance, data=[], allow_empty=False, partial=True, many=True) + assert not serializer.is_valid() + assert serializer.validated_data == [] + assert len(serializer.errors) == 1 + assert serializer.errors['non_field_errors'] == [u'This list may not be empty.'] + + def test_update_allow_empty_false(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + instance = [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + input_data = [{'update_field': 31}, {'update_field': 41}] + updated_data_list = [ + {'update_field': 31, 'store_field': 12}, + {'update_field': 41, 'store_field': 22}, + ] + + serializer = ListSerializer( + instance, data=input_data, allow_empty=False, partial=True, many=True) + assert serializer.is_valid() + + for index, data in enumerate(serializer.validated_data): + for key, value in data.items(): + assert value == updated_data_list[index][key] + + assert serializer.errors == [] + + def test_as_field_allow_empty_true(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + class Serializer(serializers.Serializer): + extra_field = serializers.IntegerField() + list_field = ListSerializer(many=True) + + instance = { + 'extra_field': 1, + 'list_field': [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + } + + serializer = Serializer(instance, data={}, partial=True) + assert serializer.is_valid() + assert serializer.validated_data == {} + assert serializer.errors == {} + + def test_udate_as_field_allow_empty_true(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + class Serializer(serializers.Serializer): + extra_field = serializers.IntegerField() + list_field = ListSerializer(many=True) + + instance = { + 'extra_field': 1, + 'list_field': [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + } + input_data_1 = {'extra_field': 2} + input_data_2 = { + 'list_field': [ + {'update_field': 31}, + {'update_field': 41}, + ] + } + + # data_1 + serializer = Serializer(instance, data=input_data_1, partial=True) + assert serializer.is_valid() + assert len(serializer.validated_data) == 1 + assert serializer.validated_data['extra_field'] == 2 + assert serializer.errors == {} + + # data_2 + serializer = Serializer(instance, data=input_data_2, partial=True) + assert serializer.is_valid() + + updated_data_list = [ + {'update_field': 31, 'store_field': 12}, + {'update_field': 41, 'store_field': 22}, + ] + for index, data in enumerate(serializer.validated_data['list_field']): + for key, value in data.items(): + assert value == updated_data_list[index][key] + + assert serializer.errors == {} + + def test_as_field_allow_empty_false(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + class Serializer(serializers.Serializer): + extra_field = serializers.IntegerField() + list_field = ListSerializer(many=True, allow_empty=False) + + instance = { + 'extra_field': 1, + 'list_field': [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + } + + serializer = Serializer(instance, data={}, partial=True) + assert serializer.is_valid() + assert serializer.validated_data == {} + assert serializer.errors == {} + + def test_update_as_field_allow_empty_false(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + class Serializer(serializers.Serializer): + extra_field = serializers.IntegerField() + list_field = ListSerializer(many=True, allow_empty=False) + + instance = { + 'extra_field': 1, + 'list_field': [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + } + input_data_1 = {'extra_field': 2} + input_data_2 = { + 'list_field': [ + {'update_field': 31}, + {'update_field': 41}, + ] + } + updated_data_list = [ + {'update_field': 31, 'store_field': 12}, + {'update_field': 41, 'store_field': 22}, + ] + + # data_1 + serializer = Serializer(instance, data=input_data_1, partial=True) + assert serializer.is_valid() + assert serializer.errors == {} + + # data_2 + serializer = Serializer(instance, data=input_data_2, partial=True) + assert serializer.is_valid() + + for index, data in enumerate(serializer.validated_data['list_field']): + for key, value in data.items(): + assert value == updated_data_list[index][key] + + assert serializer.errors == {} From c752e9618fedc6eb3e103cf8740742ff3e731899 Mon Sep 17 00:00:00 2001 From: Vadim Date: Wed, 29 Jun 2016 10:21:28 +0300 Subject: [PATCH 03/58] Fix test for py32-django18. --- tests/test_serializer_lists.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_serializer_lists.py b/tests/test_serializer_lists.py index 740197c28..a7955d83c 100644 --- a/tests/test_serializer_lists.py +++ b/tests/test_serializer_lists.py @@ -374,7 +374,7 @@ class TestSerializerPartialUsage: assert not serializer.is_valid() assert serializer.validated_data == [] assert len(serializer.errors) == 1 - assert serializer.errors['non_field_errors'] == [u'This list may not be empty.'] + assert serializer.errors['non_field_errors'][0] == 'This list may not be empty.' def test_update_allow_empty_false(self): class ListSerializer(serializers.Serializer): From ec4761225e5a1683b046752e7090e91abfa52f54 Mon Sep 17 00:00:00 2001 From: dfavato Date: Tue, 23 Aug 2016 14:52:20 -0300 Subject: [PATCH 04/58] Set self.count before self.limit in LimitOffsetPagination By doing this it is possible to override get_limit in order to return all records if the request has a predefined param. For example, if one wants that all records are retrieved if url has &limit=-1, get_limit could return self.count in this case. Otherwise, if self.count is set after self.limit then, to achive the same result, one has to override get_limit and paginate_queryset, or run get_limit twice. --- rest_framework/pagination.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py index c54894efc..755debea3 100644 --- a/rest_framework/pagination.py +++ b/rest_framework/pagination.py @@ -303,12 +303,12 @@ class LimitOffsetPagination(BasePagination): template = 'rest_framework/pagination/numbers.html' def paginate_queryset(self, queryset, request, view=None): + self.count = _get_count(queryset) self.limit = self.get_limit(request) if self.limit is None: return None self.offset = self.get_offset(request) - self.count = _get_count(queryset) self.request = request if self.count > self.limit and self.template is not None: self.display_page_controls = True From b558c9ecc4d0ebd9d7e3730ea80fa06d9d01591a Mon Sep 17 00:00:00 2001 From: Xavier Ordoquy Date: Wed, 15 Mar 2017 08:07:12 +0100 Subject: [PATCH 05/58] Allow the documentation and schema shortcut functions to get a list of urls to introspect. --- rest_framework/documentation.py | 18 +++++++++++------- rest_framework/schemas.py | 6 ++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/rest_framework/documentation.py b/rest_framework/documentation.py index 3a56b7cb1..6ade12210 100644 --- a/rest_framework/documentation.py +++ b/rest_framework/documentation.py @@ -6,7 +6,7 @@ from rest_framework.renderers import ( from rest_framework.schemas import get_schema_view -def get_docs_view(title=None, description=None, schema_url=None, public=True): +def get_docs_view(title=None, description=None, schema_url=None, public=True, patterns=None): renderer_classes = [DocumentationRenderer, CoreJSONRenderer] return get_schema_view( @@ -14,11 +14,12 @@ def get_docs_view(title=None, description=None, schema_url=None, public=True): url=schema_url, description=description, renderer_classes=renderer_classes, - public=public + public=public, + patterns=patterns, ) -def get_schemajs_view(title=None, description=None, schema_url=None, public=True): +def get_schemajs_view(title=None, description=None, schema_url=None, public=True, patterns=None): renderer_classes = [SchemaJSRenderer] return get_schema_view( @@ -26,22 +27,25 @@ def get_schemajs_view(title=None, description=None, schema_url=None, public=True url=schema_url, description=description, renderer_classes=renderer_classes, - public=public + public=public, + patterns=patterns, ) -def include_docs_urls(title=None, description=None, schema_url=None, public=True): +def include_docs_urls(title=None, description=None, schema_url=None, public=True, patterns=None): docs_view = get_docs_view( title=title, description=description, schema_url=schema_url, - public=public + public=public, + patterns=patterns, ) schema_js_view = get_schemajs_view( title=title, description=description, schema_url=schema_url, - public=public + public=public, + patterns=patterns, ) urls = [ url(r'^$', docs_view, name='docs-index'), diff --git a/rest_framework/schemas.py b/rest_framework/schemas.py index ecfe835a9..5af3ab1f0 100644 --- a/rest_framework/schemas.py +++ b/rest_framework/schemas.py @@ -690,11 +690,13 @@ class SchemaView(APIView): return Response(schema) -def get_schema_view(title=None, url=None, description=None, urlconf=None, renderer_classes=None, public=False): +def get_schema_view( + title=None, url=None, description=None, urlconf=None, + renderer_classes=None, public=False, patterns=None): """ Return a schema view. """ - generator = SchemaGenerator(title=title, url=url, description=description, urlconf=urlconf) + generator = SchemaGenerator(title=title, url=url, description=description, urlconf=urlconf, patterns=patterns) return SchemaView.as_view( renderer_classes=renderer_classes, schema_generator=generator, From 1ee54fb85ccc71ab689515dc33f9e99a4d872472 Mon Sep 17 00:00:00 2001 From: Sergey Petrunin Date: Wed, 15 Mar 2017 23:45:41 -0400 Subject: [PATCH 06/58] Added test for DateTimeField validation when server has timezone with DST and input is a native time in a DST shift interval. Added pytz to requirements-testing.txt to reproduce the case. --- requirements/requirements-testing.txt | 1 + tests/test_fields.py | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/requirements/requirements-testing.txt b/requirements/requirements-testing.txt index b9e168442..ea2022512 100644 --- a/requirements/requirements-testing.txt +++ b/requirements/requirements-testing.txt @@ -2,3 +2,4 @@ pytest==3.0.5 pytest-django==3.1.2 pytest-cov==2.4.0 +pytz==2016.10 diff --git a/tests/test_fields.py b/tests/test_fields.py index 16221d4cc..971e7f0e1 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -9,7 +9,7 @@ import pytest from django.http import QueryDict from django.test import TestCase, override_settings from django.utils import six -from django.utils.timezone import utc +from django.utils.timezone import utc, pytz import rest_framework from rest_framework import serializers @@ -1205,6 +1205,23 @@ class TestNaiveDateTimeField(FieldValues): field = serializers.DateTimeField(default_timezone=None) +class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues): + """ + Invalid values for `DateTimeField` with datetime in DST shift (non-existing or ambiguous) and timezone with DST. + Timezone America/New_York has DST shift from 2017-03-12T02:00:00 to 2017-03-12T03:00:00 and + from 2017-11-05T02:00:00 to 2017-11-05T01:00:00 in 2017. + """ + valid_inputs = {} + invalid_inputs = { + '2017-03-12T02:30:00': [ + 'Datetime can not be converted to server timezone due to NonExistentTimeError.'], + '2017-11-05T01:30:00': [ + 'Datetime can not be converted to server timezone due to AmbiguousTimeError.'] + } + outputs = {} + field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York')) + + class TestTimeField(FieldValues): """ Valid and invalid values for `TimeField`. From d4726dab81412af779cb7fcdc7c29fc07edc4bea Mon Sep 17 00:00:00 2001 From: Sergey Petrunin Date: Sat, 18 Mar 2017 22:43:08 -0400 Subject: [PATCH 07/58] Fix bug for not existent or ambiguous datetime during native to aware conversion in timezone with DST. Ref: #4986 --- rest_framework/fields.py | 6 +++++- tests/test_fields.py | 8 +++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 5a881c772..fa6ff0bf8 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1085,6 +1085,7 @@ class DateTimeField(Field): default_error_messages = { 'invalid': _('Datetime has wrong format. Use one of these formats instead: {format}.'), 'date': _('Expected a datetime but got a date.'), + 'make_aware': _('Datetime can not be represented in timezone "{timezone}".') } datetime_parser = datetime.datetime.strptime @@ -1105,7 +1106,10 @@ class DateTimeField(Field): field_timezone = getattr(self, 'timezone', self.default_timezone()) if (field_timezone is not None) and not timezone.is_aware(value): - return timezone.make_aware(value, field_timezone) + try: + return timezone.make_aware(value, field_timezone) + except Exception: + self.fail('make_aware', timezone=field_timezone) elif (field_timezone is None) and timezone.is_aware(value): return timezone.make_naive(value, utc) return value diff --git a/tests/test_fields.py b/tests/test_fields.py index 971e7f0e1..da4a05091 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -9,7 +9,7 @@ import pytest from django.http import QueryDict from django.test import TestCase, override_settings from django.utils import six -from django.utils.timezone import utc, pytz +from django.utils.timezone import pytz, utc import rest_framework from rest_framework import serializers @@ -1213,10 +1213,8 @@ class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues): """ valid_inputs = {} invalid_inputs = { - '2017-03-12T02:30:00': [ - 'Datetime can not be converted to server timezone due to NonExistentTimeError.'], - '2017-11-05T01:30:00': [ - 'Datetime can not be converted to server timezone due to AmbiguousTimeError.'] + '2017-03-12T02:30:00': ['Datetime can not be represented in timezone "America/New_York".'], + '2017-11-05T01:30:00': ['Datetime can not be represented in timezone "America/New_York".'] } outputs = {} field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York')) From e4a1bd140b3c96dd6724b413a337f639b5a949ef Mon Sep 17 00:00:00 2001 From: Sergey Petrunin Date: Mon, 20 Mar 2017 18:47:25 -0400 Subject: [PATCH 08/58] Update error message. Ref: #4986 --- rest_framework/fields.py | 2 +- tests/test_fields.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index fa6ff0bf8..6dd40acd9 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1085,7 +1085,7 @@ class DateTimeField(Field): default_error_messages = { 'invalid': _('Datetime has wrong format. Use one of these formats instead: {format}.'), 'date': _('Expected a datetime but got a date.'), - 'make_aware': _('Datetime can not be represented in timezone "{timezone}".') + 'make_aware': _('Invalid datetime for the timezone "{timezone}".') } datetime_parser = datetime.datetime.strptime diff --git a/tests/test_fields.py b/tests/test_fields.py index da4a05091..457e368cc 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1213,8 +1213,8 @@ class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues): """ valid_inputs = {} invalid_inputs = { - '2017-03-12T02:30:00': ['Datetime can not be represented in timezone "America/New_York".'], - '2017-11-05T01:30:00': ['Datetime can not be represented in timezone "America/New_York".'] + '2017-03-12T02:30:00': ['Invalid datetime for the timezone "America/New_York".'], + '2017-11-05T01:30:00': ['Invalid datetime for the timezone "America/New_York".'] } outputs = {} field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York')) From b0a0c30bfe4643e6824a3ad4d428a9742997aabe Mon Sep 17 00:00:00 2001 From: Sergey Petrunin Date: Wed, 22 Mar 2017 00:01:07 -0400 Subject: [PATCH 09/58] Added pytz exception in compat module. Mock pytz.timezone localize in tests. Ref: #4986 --- requirements/requirements-testing.txt | 1 - rest_framework/compat.py | 9 +++++++++ rest_framework/fields.py | 5 +++-- tests/test_fields.py | 15 ++++++++++++--- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/requirements/requirements-testing.txt b/requirements/requirements-testing.txt index ea2022512..b9e168442 100644 --- a/requirements/requirements-testing.txt +++ b/requirements/requirements-testing.txt @@ -2,4 +2,3 @@ pytest==3.0.5 pytest-django==3.1.2 pytest-cov==2.4.0 -pytz==2016.10 diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 45ac49841..168bccf83 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -275,6 +275,14 @@ except ImportError: def pygments_css(style): return None + +try: + import pytz + from pytz.exceptions import InvalidTimeError +except ImportError: + InvalidTimeError = Exception + + # `separators` argument to `json.dumps()` differs between 2.x and 3.x # See: http://bugs.python.org/issue22767 if six.PY3: @@ -339,6 +347,7 @@ def set_many(instance, field, value): field = getattr(instance, field) field.set(value) + def include(module, namespace=None, app_name=None): from django.conf.urls import include if django.VERSION < (1,9): diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 6dd40acd9..7ee3f1016 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -33,7 +33,8 @@ from django.utils.translation import ugettext_lazy as _ from rest_framework import ISO_8601 from rest_framework.compat import ( - get_remote_field, unicode_repr, unicode_to_repr, value_from_object + InvalidTimeError, get_remote_field, unicode_repr, unicode_to_repr, + value_from_object ) from rest_framework.exceptions import ErrorDetail, ValidationError from rest_framework.settings import api_settings @@ -1108,7 +1109,7 @@ class DateTimeField(Field): if (field_timezone is not None) and not timezone.is_aware(value): try: return timezone.make_aware(value, field_timezone) - except Exception: + except InvalidTimeError: self.fail('make_aware', timezone=field_timezone) elif (field_timezone is None) and timezone.is_aware(value): return timezone.make_naive(value, utc) diff --git a/tests/test_fields.py b/tests/test_fields.py index 457e368cc..968c41d3f 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -9,10 +9,10 @@ import pytest from django.http import QueryDict from django.test import TestCase, override_settings from django.utils import six -from django.utils.timezone import pytz, utc +from django.utils.timezone import utc import rest_framework -from rest_framework import serializers +from rest_framework import compat, serializers from rest_framework.fields import is_simple_callable try: @@ -1217,7 +1217,16 @@ class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues): '2017-11-05T01:30:00': ['Invalid datetime for the timezone "America/New_York".'] } outputs = {} - field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York')) + + class MockTimezone: + @staticmethod + def localize(value, is_dst): + raise compat.InvalidTimeError() + + def __str__(self): + return 'America/New_York' + + field = serializers.DateTimeField(default_timezone=MockTimezone()) class TestTimeField(FieldValues): From aa92736d7214cb8986721df4c3d2a3cc3a0a9dba Mon Sep 17 00:00:00 2001 From: aaronykng Date: Mon, 27 Mar 2017 07:19:11 -0700 Subject: [PATCH 10/58] Added drfpasswordless to authentication topic page. --- docs/api-guide/authentication.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/api-guide/authentication.md b/docs/api-guide/authentication.md index 4a01188f3..8e6c9d89b 100644 --- a/docs/api-guide/authentication.md +++ b/docs/api-guide/authentication.md @@ -356,6 +356,27 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a [Django-rest-knox][django-rest-knox] library provides models and views to handle token based authentication in a more secure and extensible way than the built-in TokenAuthentication scheme - with Single Page Applications and Mobile clients in mind. It provides per-client tokens, and views to generate them when provided some other authentication (usually basic authentication), to delete the token (providing a server enforced logout) and to delete all tokens (logs out all clients that a user is logged into). +## drfpasswordless + +[drfpasswordless][drfpasswordless] adds passwordless support to Django Rest Framework's own TokenAuthentication scheme. Users log in and sign up with a token sent to a contact point, either an email address or a mobile number. + +#### Example + + curl -X POST -d "email=aaron@example.com" localhost:8000/auth/email/ + +User receives an email: + + .. +

Your login token is 123456

+ .. + +The client has 15 minutes to provide the correct token in exchange for an authentication token (provided by Django Rest Framework's Token Authentication). + + curl -X POST -d "token=815381" localhost:8000/callback/auth/ + + > HTTP/1.0 200 OK + > {"token":"76be2d9ecfaf5fa4226d722bzdd8a4fff207ed0e”} + [cite]: http://jacobian.org/writing/rest-worst-practices/ [http401]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 [http403]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 @@ -396,3 +417,4 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a [django-rest-auth]: https://github.com/Tivix/django-rest-auth [django-rest-framework-social-oauth2]: https://github.com/PhilipGarnero/django-rest-framework-social-oauth2 [django-rest-knox]: https://github.com/James1345/django-rest-knox +[drfpasswordless]: https://github.com/aaronn/django-rest-framework-passwordless From 10d8ad601caf36ef980c9b5bc37439bef18b4ea0 Mon Sep 17 00:00:00 2001 From: aaronykng Date: Mon, 27 Mar 2017 07:27:46 -0700 Subject: [PATCH 11/58] Added drfpasswordless to third party packages topic page. --- docs/topics/third-party-packages.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/topics/third-party-packages.md b/docs/topics/third-party-packages.md index d092e163e..933924d3b 100644 --- a/docs/topics/third-party-packages.md +++ b/docs/topics/third-party-packages.md @@ -190,6 +190,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque * [djoser][djoser] - Provides a set of views to handle basic actions such as registration, login, logout, password reset and account activation. * [django-rest-auth][django-rest-auth] - Provides a set of REST API endpoints for registration, authentication (including social media authentication), password reset, retrieve and update user details, etc. * [drf-oidc-auth][drf-oidc-auth] - Implements OpenID Connect token authentication for DRF. +* [drfpasswordless][drfpasswordless] - Adds (Medium, Square Cash inspired) passwordless logins and signups via email and mobile numbers. ### Permissions @@ -330,3 +331,4 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque [drf-oidc-auth]: https://github.com/ByteInternet/drf-oidc-auth [drf-serializer-extensions]: https://github.com/evenicoulddoit/django-rest-framework-serializer-extensions [djangorestframework-queryfields]: https://github.com/wimglenn/djangorestframework-queryfields +[drfpasswordless]: https://github.com/aaronn/django-rest-framework-passwordless From 73bd709813ea61e5b473d00f477d8f81d70189fe Mon Sep 17 00:00:00 2001 From: Jack Evans Date: Mon, 27 Mar 2017 16:13:50 +0100 Subject: [PATCH 12/58] Document adding django_filters to installed apps Reminds users to add `django_filters` to their `INSTALLED_APPS` as detailed in the django-filter documentation https://django-filter.readthedocs.io/en/develop/guide/install.html --- docs/api-guide/filtering.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md index 8a23a2ea3..bc1cc710d 100644 --- a/docs/api-guide/filtering.md +++ b/docs/api-guide/filtering.md @@ -142,7 +142,7 @@ Note that you can use both an overridden `.get_queryset()` and generic filtering The `django-filter` library includes a `DjangoFilterBackend` class which supports highly customizable field filtering for REST framework. -To use `DjangoFilterBackend`, first install `django-filter`. +To use `DjangoFilterBackend`, first install `django-filter`. Then add `django_filters` to Django's `INSTALLED_APPS` pip install django-filter From 0400cbbc4cd20dc7f70a077600e240c504900341 Mon Sep 17 00:00:00 2001 From: aaronykng Date: Mon, 27 Mar 2017 12:08:07 -0700 Subject: [PATCH 13/58] Added drfpasswordless to Authentication docs --- docs/api-guide/authentication.md | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/docs/api-guide/authentication.md b/docs/api-guide/authentication.md index 8e6c9d89b..2344c68e3 100644 --- a/docs/api-guide/authentication.md +++ b/docs/api-guide/authentication.md @@ -358,24 +358,7 @@ HTTP Signature (currently a [IETF draft][http-signature-ietf-draft]) provides a ## drfpasswordless -[drfpasswordless][drfpasswordless] adds passwordless support to Django Rest Framework's own TokenAuthentication scheme. Users log in and sign up with a token sent to a contact point, either an email address or a mobile number. - -#### Example - - curl -X POST -d "email=aaron@example.com" localhost:8000/auth/email/ - -User receives an email: - - .. -

Your login token is 123456

- .. - -The client has 15 minutes to provide the correct token in exchange for an authentication token (provided by Django Rest Framework's Token Authentication). - - curl -X POST -d "token=815381" localhost:8000/callback/auth/ - - > HTTP/1.0 200 OK - > {"token":"76be2d9ecfaf5fa4226d722bzdd8a4fff207ed0e”} +[drfpasswordless][drfpasswordless] adds (Medium, Square Cash inspired) passwordless support to Django REST Framework's own TokenAuthentication scheme. Users log in and sign up with a token sent to a contact point like an email address or a mobile number. [cite]: http://jacobian.org/writing/rest-worst-practices/ [http401]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 From 56fe0e4b3f1f89f448f36d1b81e16364b9a73d6c Mon Sep 17 00:00:00 2001 From: Ekluv Date: Tue, 28 Mar 2017 00:38:21 +0530 Subject: [PATCH 14/58] fix unique=True validation for ChoiceField --- rest_framework/utils/field_mapping.py | 128 +++++++++++++------------- tests/test_serializer.py | 26 ++++++ 2 files changed, 88 insertions(+), 66 deletions(-) diff --git a/rest_framework/utils/field_mapping.py b/rest_framework/utils/field_mapping.py index 29005f6b7..b8817d976 100644 --- a/rest_framework/utils/field_mapping.py +++ b/rest_framework/utils/field_mapping.py @@ -123,18 +123,70 @@ def get_field_kwargs(field_name, model_field): kwargs['allow_folders'] = model_field.allow_folders if model_field.choices: - # If this model field contains choices, then return early. - # Further keyword arguments are not valid. kwargs['choices'] = model_field.choices - return kwargs + else: + # Ensure that max_value is passed explicitly as a keyword arg, + # rather than as a validator. + max_value = next(( + validator.limit_value for validator in validator_kwarg + if isinstance(validator, validators.MaxValueValidator) + ), None) + if max_value is not None and isinstance(model_field, NUMERIC_FIELD_TYPES): + kwargs['max_value'] = max_value + validator_kwarg = [ + validator for validator in validator_kwarg + if not isinstance(validator, validators.MaxValueValidator) + ] - # Our decimal validation is handled in the field code, not validator code. - # (In Django 1.9+ this differs from previous style) - if isinstance(model_field, models.DecimalField) and DecimalValidator: - validator_kwarg = [ - validator for validator in validator_kwarg - if not isinstance(validator, DecimalValidator) - ] + # Ensure that max_value is passed explicitly as a keyword arg, + # rather than as a validator. + min_value = next(( + validator.limit_value for validator in validator_kwarg + if isinstance(validator, validators.MinValueValidator) + ), None) + if min_value is not None and isinstance(model_field, NUMERIC_FIELD_TYPES): + kwargs['min_value'] = min_value + validator_kwarg = [ + validator for validator in validator_kwarg + if not isinstance(validator, validators.MinValueValidator) + ] + + # URLField does not need to include the URLValidator argument, + # as it is explicitly added in. + if isinstance(model_field, models.URLField): + validator_kwarg = [ + validator for validator in validator_kwarg + if not isinstance(validator, validators.URLValidator) + ] + + # EmailField does not need to include the validate_email argument, + # as it is explicitly added in. + if isinstance(model_field, models.EmailField): + validator_kwarg = [ + validator for validator in validator_kwarg + if validator is not validators.validate_email + ] + + # SlugField do not need to include the 'validate_slug' argument, + if isinstance(model_field, models.SlugField): + validator_kwarg = [ + validator for validator in validator_kwarg + if validator is not validators.validate_slug + ] + + # IPAddressField do not need to include the 'validate_ipv46_address' argument, + if isinstance(model_field, models.GenericIPAddressField): + validator_kwarg = [ + validator for validator in validator_kwarg + if validator is not validators.validate_ipv46_address + ] + # Our decimal validation is handled in the field code, not validator code. + # (In Django 1.9+ this differs from previous style) + if isinstance(model_field, models.DecimalField) and DecimalValidator: + validator_kwarg = [ + validator for validator in validator_kwarg + if not isinstance(validator, DecimalValidator) + ] # Ensure that max_length is passed explicitly as a keyword arg, # rather than as a validator. @@ -160,62 +212,6 @@ def get_field_kwargs(field_name, model_field): if not isinstance(validator, validators.MinLengthValidator) ] - # Ensure that max_value is passed explicitly as a keyword arg, - # rather than as a validator. - max_value = next(( - validator.limit_value for validator in validator_kwarg - if isinstance(validator, validators.MaxValueValidator) - ), None) - if max_value is not None and isinstance(model_field, NUMERIC_FIELD_TYPES): - kwargs['max_value'] = max_value - validator_kwarg = [ - validator for validator in validator_kwarg - if not isinstance(validator, validators.MaxValueValidator) - ] - - # Ensure that max_value is passed explicitly as a keyword arg, - # rather than as a validator. - min_value = next(( - validator.limit_value for validator in validator_kwarg - if isinstance(validator, validators.MinValueValidator) - ), None) - if min_value is not None and isinstance(model_field, NUMERIC_FIELD_TYPES): - kwargs['min_value'] = min_value - validator_kwarg = [ - validator for validator in validator_kwarg - if not isinstance(validator, validators.MinValueValidator) - ] - - # URLField does not need to include the URLValidator argument, - # as it is explicitly added in. - if isinstance(model_field, models.URLField): - validator_kwarg = [ - validator for validator in validator_kwarg - if not isinstance(validator, validators.URLValidator) - ] - - # EmailField does not need to include the validate_email argument, - # as it is explicitly added in. - if isinstance(model_field, models.EmailField): - validator_kwarg = [ - validator for validator in validator_kwarg - if validator is not validators.validate_email - ] - - # SlugField do not need to include the 'validate_slug' argument, - if isinstance(model_field, models.SlugField): - validator_kwarg = [ - validator for validator in validator_kwarg - if validator is not validators.validate_slug - ] - - # IPAddressField do not need to include the 'validate_ipv46_address' argument, - if isinstance(model_field, models.GenericIPAddressField): - validator_kwarg = [ - validator for validator in validator_kwarg - if validator is not validators.validate_ipv46_address - ] - if getattr(model_field, 'unique', False): unique_error_message = model_field.error_messages.get('unique', None) if unique_error_message: diff --git a/tests/test_serializer.py b/tests/test_serializer.py index f76cec9c3..37d22ed21 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -519,3 +519,29 @@ class TestDeclaredFieldInheritance: assert len(Parent().get_fields()) == 2 assert len(Child().get_fields()) == 2 assert len(Grandchild().get_fields()) == 2 + + +class Poll(models.Model): + CHOICES = ( + ('choice1', 'choice 1'), + ('choice2', 'choice 1'), + ) + + name = models.CharField( + 'name', max_length=254, unique=True, choices=CHOICES + ) + + +@pytest.mark.django_db +class Test5004UniqueChoiceField: + def test_unique_choice_field(self): + Poll.objects.create(name='choice1') + + class PollSerializer(serializers.ModelSerializer): + class Meta: + model = Poll + fields = '__all__' + + serializer = PollSerializer(data={'name': 'choice1'}) + assert not serializer.is_valid() + assert serializer.errors == {'name': ['poll with this name already exists.']} From ef8092ba2f662b3bc2197f322f393a5b31a67fcb Mon Sep 17 00:00:00 2001 From: Ekluv Date: Tue, 28 Mar 2017 11:50:55 +0530 Subject: [PATCH 15/58] update test case --- tests/test_model_serializer.py | 28 ++++++++++++++++++++++++++++ tests/test_serializer.py | 26 -------------------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index cfa671125..3633781fd 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -99,6 +99,15 @@ class Issue3674ChildModel(models.Model): value = models.CharField(primary_key=True, max_length=64) +class UniqueChoiceModel(models.Model): + CHOICES = ( + ('choice1', 'choice 1'), + ('choice2', 'choice 1'), + ) + + name = models.CharField(max_length=254, unique=True, choices=CHOICES) + + class TestModelSerializer(TestCase): def test_create_method(self): class TestSerializer(serializers.ModelSerializer): @@ -1080,3 +1089,22 @@ class Issue4897TestCase(TestCase): with pytest.raises(AssertionError) as cm: TestSerializer(obj).fields cm.match(r'readonly_fields') + + +class Test5004UniqueChoiceField(TestCase): + def test_unique_choice_field(self): + class TestUniqueChoiceSerializer(serializers.ModelSerializer): + class Meta: + model = UniqueChoiceModel + fields = '__all__' + + UniqueChoiceModel.objects.create(name='choice1') + serializer = TestUniqueChoiceSerializer(data={'name': 'choice1'}) + expected = dedent(""" + TestUniqueChoiceSerializer(): + id = IntegerField(label='ID', read_only=True) + name = ChoiceField(choices=(('choice1', 'choice 1'), ('choice2', 'choice 1')), validators=[]) + """) + self.assertEqual(unicode_repr(TestUniqueChoiceSerializer()), expected) + assert not serializer.is_valid() + assert serializer.errors == {'name': ['unique choice model with this name already exists.']} diff --git a/tests/test_serializer.py b/tests/test_serializer.py index 37d22ed21..f76cec9c3 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -519,29 +519,3 @@ class TestDeclaredFieldInheritance: assert len(Parent().get_fields()) == 2 assert len(Child().get_fields()) == 2 assert len(Grandchild().get_fields()) == 2 - - -class Poll(models.Model): - CHOICES = ( - ('choice1', 'choice 1'), - ('choice2', 'choice 1'), - ) - - name = models.CharField( - 'name', max_length=254, unique=True, choices=CHOICES - ) - - -@pytest.mark.django_db -class Test5004UniqueChoiceField: - def test_unique_choice_field(self): - Poll.objects.create(name='choice1') - - class PollSerializer(serializers.ModelSerializer): - class Meta: - model = Poll - fields = '__all__' - - serializer = PollSerializer(data={'name': 'choice1'}) - assert not serializer.is_valid() - assert serializer.errors == {'name': ['poll with this name already exists.']} From d66304abe610e68cce482b40a2133d68cc654803 Mon Sep 17 00:00:00 2001 From: Ekluv Date: Tue, 28 Mar 2017 12:02:03 +0530 Subject: [PATCH 16/58] update test case --- tests/test_model_serializer.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 3633781fd..08fc3b42d 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -1100,11 +1100,5 @@ class Test5004UniqueChoiceField(TestCase): UniqueChoiceModel.objects.create(name='choice1') serializer = TestUniqueChoiceSerializer(data={'name': 'choice1'}) - expected = dedent(""" - TestUniqueChoiceSerializer(): - id = IntegerField(label='ID', read_only=True) - name = ChoiceField(choices=(('choice1', 'choice 1'), ('choice2', 'choice 1')), validators=[]) - """) - self.assertEqual(unicode_repr(TestUniqueChoiceSerializer()), expected) assert not serializer.is_valid() assert serializer.errors == {'name': ['unique choice model with this name already exists.']} From f27c551218a2bb4fdb51614fb11306a68b4d0f57 Mon Sep 17 00:00:00 2001 From: Ilya Beda Date: Wed, 29 Mar 2017 12:51:01 +0700 Subject: [PATCH 17/58] Fix typo at docstring --- rest_framework/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index b699d7caf..85a1fa62e 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -9,7 +9,7 @@ REST_FRAMEWORK = { ) 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', - 'rest_framework.parsers.TemplateHTMLRenderer', + 'rest_framework.parsers.TemplateHTMLParser', ) } From d417c6d1b9fb779f86b11e7526337f4101af414f Mon Sep 17 00:00:00 2001 From: Xavier Ordoquy Date: Wed, 29 Mar 2017 07:57:14 +0200 Subject: [PATCH 18/58] Fix parser names in docstring. --- rest_framework/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rest_framework/settings.py b/rest_framework/settings.py index 85a1fa62e..3f3c9110a 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -9,7 +9,8 @@ REST_FRAMEWORK = { ) 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', - 'rest_framework.parsers.TemplateHTMLParser', + 'rest_framework.parsers.FormParser', + 'rest_framework.parsers.MultiPartParser' ) } From 4a54d9f4740a2e813481ade1d5a37fa507e64ae6 Mon Sep 17 00:00:00 2001 From: htmis Date: Wed, 29 Mar 2017 20:21:18 -0400 Subject: [PATCH 19/58] Update Boolean field to more closely match python library Python Reference: distutils.util.strtobool(val) Convert a string representation of truth to true (1) or false (0). True values are y, yes, t, true, on and 1; false values are n, no, f, false, off and 0. Raises ValueError if val is anything else. --- rest_framework/fields.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 5a881c772..c81dba4d9 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -649,6 +649,7 @@ class BooleanField(Field): initial = False TRUE_VALUES = { 't', 'T', + 'y', 'Y', 'yes', 'YES', 'true', 'True', 'TRUE', 'on', 'On', 'ON', '1', 1, @@ -656,6 +657,7 @@ class BooleanField(Field): } FALSE_VALUES = { 'f', 'F', + 'n', 'N', 'no', 'NO', 'false', 'False', 'FALSE', 'off', 'Off', 'OFF', '0', 0, 0.0, From 471065ebc616aadced86719c59ed6dda25c9abbc Mon Sep 17 00:00:00 2001 From: minusf Date: Thu, 30 Mar 2017 12:28:55 +0200 Subject: [PATCH 20/58] Update 7-schemas-and-client-libraries.md --- docs/tutorial/7-schemas-and-client-libraries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/7-schemas-and-client-libraries.md b/docs/tutorial/7-schemas-and-client-libraries.md index d253e4352..4a535da83 100644 --- a/docs/tutorial/7-schemas-and-client-libraries.md +++ b/docs/tutorial/7-schemas-and-client-libraries.md @@ -41,7 +41,7 @@ view in our URL configuration. schema_view = get_schema_view(title='Pastebin API') urlpatterns = [ -        url(r'^schema/$', schema_view), +    url(r'^schema/$', schema_view), ... ] From f1ca71ce217a0477bc1f54dfd551b5da23386e41 Mon Sep 17 00:00:00 2001 From: s-m-b Date: Thu, 6 Apr 2017 16:38:28 +0400 Subject: [PATCH 21/58] Pass initkwargs stored on view to instance --- rest_framework/utils/breadcrumbs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rest_framework/utils/breadcrumbs.py b/rest_framework/utils/breadcrumbs.py index e6e7e3cc3..22f0d8a3b 100644 --- a/rest_framework/utils/breadcrumbs.py +++ b/rest_framework/utils/breadcrumbs.py @@ -24,11 +24,12 @@ def get_breadcrumbs(url, request=None): # Check if this is a REST framework view, # and if so add it to the breadcrumbs cls = getattr(view, 'cls', None) + initkwargs = getattr(view, 'initkwargs', {}) if cls is not None and issubclass(cls, APIView): # Don't list the same view twice in a row. # Probably an optional trailing slash. if not seen or seen[-1] != view: - c = cls() + c = cls(**initkwargs) c.suffix = getattr(view, 'suffix', None) name = c.get_view_name() insert_url = preserve_builtin_query_params(prefix + url, request) From c2ee1b30337962c5e7d583c4f4714ffb7f5f561a Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Thu, 6 Apr 2017 13:25:21 -0500 Subject: [PATCH 22/58] Use overridden settings exception handler Instead of using the api_settings exception handler, we use the overridden settings attribute to find the correct handler. Closes #5054 --- rest_framework/views.py | 2 +- tests/test_views.py | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/rest_framework/views.py b/rest_framework/views.py index 92911e8df..2cb926ae4 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -290,7 +290,7 @@ class APIView(View): """ Returns the exception handler that this view uses. """ - return api_settings.EXCEPTION_HANDLER + return self.settings.EXCEPTION_HANDLER # API policy implementation methods diff --git a/tests/test_views.py b/tests/test_views.py index adafa1cd7..f0919e846 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -8,7 +8,7 @@ from django.test import TestCase from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response -from rest_framework.settings import api_settings +from rest_framework.settings import APISettings, api_settings from rest_framework.test import APIRequestFactory from rest_framework.views import APIView @@ -45,6 +45,19 @@ class ErrorView(APIView): raise Exception +def custom_handler(exc, context): + if isinstance(exc, SyntaxError): + return Response({'error': 'SyntaxError'}, status=400) + return Response({'error': 'UnknownError'}, status=500) + + +class OverridenSettingsView(APIView): + settings = APISettings({'EXCEPTION_HANDLER': custom_handler}) + + def get(self, request, *args, **kwargs): + raise SyntaxError('request is invalid syntax') + + @api_view(['GET']) def error_view(request): raise Exception @@ -118,3 +131,14 @@ class TestCustomExceptionHandler(TestCase): expected = 'Error!' assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.data == expected + + +class TestCustomSettings(TestCase): + def setUp(self): + self.view = OverridenSettingsView.as_view() + + def test_get_exception_handler(self): + request = factory.get('/', content_type='application/json') + response = self.view(request) + assert response.status_code == 400 + assert response.data == {'error': 'SyntaxError'} From c1f31492aec99e69bbf945932ae992b3c0305a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Padilla?= Date: Fri, 7 Apr 2017 10:28:35 -0400 Subject: [PATCH 23/58] Update links after moving to encode org --- CONTRIBUTING.md | 6 +- PULL_REQUEST_TEMPLATE.md | 2 +- README.md | 20 +- docs/index.md | 10 +- docs/topics/2.2-announcement.md | 4 +- docs/topics/2.4-announcement.md | 4 +- docs/topics/3.0-announcement.md | 4 +- docs/topics/3.2-announcement.md | 2 +- docs/topics/3.3-announcement.md | 2 +- docs/topics/3.4-announcement.md | 4 +- docs/topics/3.5-announcement.md | 2 +- docs/topics/browser-enhancements.md | 2 +- docs/topics/contributing.md | 6 +- docs/topics/internationalization.md | 4 +- docs/topics/jobs.md | 2 +- docs/topics/project-management.md | 12 +- docs/topics/release-notes.md | 1168 ++++++++--------- docs/topics/third-party-packages.md | 6 +- docs/topics/tutorials-and-resources.md | 2 +- docs/tutorial/1-serialization.md | 2 +- .../7-schemas-and-client-libraries.md | 4 +- docs_theme/main.html | 2 +- docs_theme/nav.html | 2 +- mkdocs.yml | 2 +- rest_framework/authtoken/models.py | 2 +- rest_framework/fields.py | 4 +- rest_framework/filters.py | 2 +- rest_framework/validators.py | 2 +- tests/browsable_api/test_form_rendering.py | 2 +- tests/test_authentication.py | 4 +- tests/test_description.py | 2 +- tests/test_generics.py | 2 +- tests/test_prefetch_related.py | 2 +- tests/test_relations_pk.py | 2 +- tests/test_renderers.py | 2 +- 35 files changed, 650 insertions(+), 650 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 415e42ac0..ba579568d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,7 +50,7 @@ Getting involved in triaging incoming issues is a good way to start contributing To start developing on Django REST framework, clone the repo: - git clone git@github.com:tomchristie/django-rest-framework.git + git clone git@github.com:encode/django-rest-framework.git Changes should broadly follow the [PEP 8][pep-8] style conventions, and we recommend you set up your editor to automatically indicate non-conforming styles. @@ -198,10 +198,10 @@ If you want to draw attention to a note or warning, use a pair of enclosing line [code-of-conduct]: https://www.djangoproject.com/conduct/ [google-group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework [so-filter]: http://stackexchange.com/filters/66475/rest-framework -[issues]: https://github.com/tomchristie/django-rest-framework/issues?state=open +[issues]: https://github.com/encode/django-rest-framework/issues?state=open [pep-8]: http://www.python.org/dev/peps/pep-0008/ [pull-requests]: https://help.github.com/articles/using-pull-requests [tox]: https://tox.readthedocs.io/en/latest/ [markdown]: http://daringfireball.net/projects/markdown/basics -[docs]: https://github.com/tomchristie/django-rest-framework/tree/master/docs +[docs]: https://github.com/encode/django-rest-framework/tree/master/docs [mou]: http://mouapp.com/ diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 49f980c93..70673c6c1 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ -*Note*: Before submitting this pull request, please review our [contributing guidelines](https://github.com/tomchristie/django-rest-framework/blob/master/CONTRIBUTING.md#pull-requests). +*Note*: Before submitting this pull request, please review our [contributing guidelines](https://github.com/encode/django-rest-framework/blob/master/CONTRIBUTING.md#pull-requests). ## Description diff --git a/README.md b/README.md index 7d11aa081..0056af58d 100644 --- a/README.md +++ b/README.md @@ -21,12 +21,12 @@ The initial aim is to provide a single full-time position on REST framework. *Every single sign-up makes a significant impact towards making that possible.*

- - - - - - + + + + + +

*Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Rover](http://jobs.rover.com/), [Sentry](https://getsentry.com/welcome/), [Stream](https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf), [Machinalis](https://hello.machinalis.co.uk/), [Rollbar](https://rollbar.com), and [MicroPyramid](https://micropyramid.com/django-rest-framework-development-services/).* @@ -176,10 +176,10 @@ If you believe you've found something in Django REST framework which has securit Send a description of the issue via email to [rest-framework-security@googlegroups.com][security-mail]. The project maintainers will then work with you to resolve any issues where required, prior to any public disclosure. -[build-status-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.svg?branch=master -[travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master -[coverage-status-image]: https://img.shields.io/codecov/c/github/tomchristie/django-rest-framework/master.svg -[codecov]: http://codecov.io/github/tomchristie/django-rest-framework?branch=master +[build-status-image]: https://secure.travis-ci.org/encode/django-rest-framework.svg?branch=master +[travis]: http://travis-ci.org/encode/django-rest-framework?branch=master +[coverage-status-image]: https://img.shields.io/codecov/c/github/encode/django-rest-framework/master.svg +[codecov]: http://codecov.io/github/encode/django-rest-framework?branch=master [pypi-version]: https://img.shields.io/pypi/v/djangorestframework.svg [pypi]: https://pypi.python.org/pypi/djangorestframework [twitter]: https://twitter.com/_tomchristie diff --git a/docs/index.md b/docs/index.md index 13edf08dd..4883f0505 100644 --- a/docs/index.md +++ b/docs/index.md @@ -18,10 +18,10 @@

- + - - + + @@ -108,7 +108,7 @@ Install using `pip`, including any optional packages you want... ...or clone the project from github. - git clone git@github.com:tomchristie/django-rest-framework.git + git clone git@github.com:encode/django-rest-framework.git Add `'rest_framework'` to your `INSTALLED_APPS` setting. @@ -311,7 +311,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. [django-filter]: http://pypi.python.org/pypi/django-filter [django-crispy-forms]: https://github.com/maraujop/django-crispy-forms [django-guardian]: https://github.com/lukaszb/django-guardian -[0.4]: https://github.com/tomchristie/django-rest-framework/tree/0.4.X +[0.4]: https://github.com/encode/django-rest-framework/tree/0.4.X [image]: img/quickstart.png [index]: . [oauth1-section]: api-guide/authentication/#django-rest-framework-oauth diff --git a/docs/topics/2.2-announcement.md b/docs/topics/2.2-announcement.md index ca4ed2efa..2d743af24 100644 --- a/docs/topics/2.2-announcement.md +++ b/docs/topics/2.2-announcement.md @@ -155,5 +155,5 @@ From version 2.2 onwards, serializers with hyperlinked relationships *always* re [mailing-list]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework [django-rest-framework-docs]: https://github.com/marcgibbons/django-rest-framework-docs [marcgibbons]: https://github.com/marcgibbons/ -[issues]: https://github.com/tomchristie/django-rest-framework/issues -[564]: https://github.com/tomchristie/django-rest-framework/issues/564 +[issues]: https://github.com/encode/django-rest-framework/issues +[564]: https://github.com/encode/django-rest-framework/issues/564 diff --git a/docs/topics/2.4-announcement.md b/docs/topics/2.4-announcement.md index 96f68c865..8bbe61335 100644 --- a/docs/topics/2.4-announcement.md +++ b/docs/topics/2.4-announcement.md @@ -167,6 +167,6 @@ Once again, many thanks to all the generous [backers and sponsors][kickstarter-s [view-name-and-description-settings]: ../api-guide/settings#view-names-and-descriptions [client-ip-identification]: ../api-guide/throttling#how-clients-are-identified [2-3-announcement]: 2.3-announcement -[github-labels]: https://github.com/tomchristie/django-rest-framework/issues -[github-milestones]: https://github.com/tomchristie/django-rest-framework/milestones +[github-labels]: https://github.com/encode/django-rest-framework/issues +[github-milestones]: https://github.com/encode/django-rest-framework/milestones [kickstarter-sponsors]: kickstarter-announcement#sponsors diff --git a/docs/topics/3.0-announcement.md b/docs/topics/3.0-announcement.md index f09788f56..25c36b2ca 100644 --- a/docs/topics/3.0-announcement.md +++ b/docs/topics/3.0-announcement.md @@ -957,9 +957,9 @@ The 3.1 release is planned to address improvements in the following components: The 3.2 release is planned to introduce an alternative admin-style interface to the browsable API. -You can follow development on the GitHub site, where we use [milestones to indicate planning timescales](https://github.com/tomchristie/django-rest-framework/milestones). +You can follow development on the GitHub site, where we use [milestones to indicate planning timescales](https://github.com/encode/django-rest-framework/milestones). [kickstarter]: http://kickstarter.com/projects/tomchristie/django-rest-framework-3 [sponsors]: http://www.django-rest-framework.org/topics/kickstarter-announcement/#sponsors -[mixins.py]: https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py +[mixins.py]: https://github.com/encode/django-rest-framework/blob/master/rest_framework/mixins.py [django-localization]: https://docs.djangoproject.com/en/stable/topics/i18n/translation/#localization-how-to-create-language-files diff --git a/docs/topics/3.2-announcement.md b/docs/topics/3.2-announcement.md index dc439f110..8500a9892 100644 --- a/docs/topics/3.2-announcement.md +++ b/docs/topics/3.2-announcement.md @@ -8,7 +8,7 @@ This interface is intended to act as a more user-friendly interface to the API. We've also fixed a huge number of issues, and made numerous cleanups and improvements. -Over the course of the 3.1.x series we've [resolved nearly 600 tickets](https://github.com/tomchristie/django-rest-framework/issues?utf8=%E2%9C%93&q=closed%3A%3E2015-03-05) on our GitHub issue tracker. This means we're currently running at a rate of **closing around 100 issues or pull requests per month**. +Over the course of the 3.1.x series we've [resolved nearly 600 tickets](https://github.com/encode/django-rest-framework/issues?utf8=%E2%9C%93&q=closed%3A%3E2015-03-05) on our GitHub issue tracker. This means we're currently running at a rate of **closing around 100 issues or pull requests per month**. None of this would have been possible without the support of our wonderful Kickstarter backers. If you're looking for a job in Django development we'd strongly recommend taking [a look through our sponsors](http://www.django-rest-framework.org/topics/kickstarter-announcement/#sponsors) and finding out who's hiring. diff --git a/docs/topics/3.3-announcement.md b/docs/topics/3.3-announcement.md index d1a8f4da0..44e8dd511 100644 --- a/docs/topics/3.3-announcement.md +++ b/docs/topics/3.3-announcement.md @@ -53,6 +53,6 @@ The following pagination view attributes and settings have been moved into attri The `ModelSerializer` and `HyperlinkedModelSerializer` classes should now include either a `fields` or `exclude` option, although the `fields = '__all__'` shortcut may be used. Failing to include either of these two options is currently pending deprecation, and will be removed entirely in the 3.5 release. This behavior brings `ModelSerializer` more closely in line with Django's `ModelForm` behavior. [forms-api]: html-and-forms.md -[ajax-form]: https://github.com/tomchristie/ajax-form +[ajax-form]: https://github.com/encode/ajax-form [jsonfield]: ../../api-guide/fields#jsonfield [django-supported-versions]: https://www.djangoproject.com/download/#supported-versions \ No newline at end of file diff --git a/docs/topics/3.4-announcement.md b/docs/topics/3.4-announcement.md index 438192c9c..7db145600 100644 --- a/docs/topics/3.4-announcement.md +++ b/docs/topics/3.4-announcement.md @@ -188,7 +188,7 @@ The full set of itemized release notes [are available here][release-notes]. [tut-7]: ../../tutorial/7-schemas-and-client-libraries/ [schema-generation]: ../../api-guide/schemas/ [api-clients]: api-clients.md -[milestone]: https://github.com/tomchristie/django-rest-framework/milestone/35 +[milestone]: https://github.com/encode/django-rest-framework/milestone/35 [release-notes]: release-notes#34 [metadata]: ../../api-guide/metadata/#custom-metadata-classes -[gh3751]: https://github.com/tomchristie/django-rest-framework/issues/3751 +[gh3751]: https://github.com/encode/django-rest-framework/issues/3751 diff --git a/docs/topics/3.5-announcement.md b/docs/topics/3.5-announcement.md index ea50b2418..701ab48eb 100644 --- a/docs/topics/3.5-announcement.md +++ b/docs/topics/3.5-announcement.md @@ -261,6 +261,6 @@ in version 3.3 and raised a deprecation warning in 3.4. Its usage is now mandato [schema-generation-api]: ../api-guide/schemas/#schemagenerator [schema-docs]: ../api-guide/schemas/#schemas-as-documentation [schema-view]: ../api-guide/schemas/#the-get_schema_view-shortcut -[django-rest-raml]: https://github.com/tomchristie/django-rest-raml +[django-rest-raml]: https://github.com/encode/django-rest-raml [raml-image]: ../img/raml.png [raml-codec]: https://github.com/core-api/python-raml-codec diff --git a/docs/topics/browser-enhancements.md b/docs/topics/browser-enhancements.md index e1977e826..6c1ad83be 100644 --- a/docs/topics/browser-enhancements.md +++ b/docs/topics/browser-enhancements.md @@ -81,7 +81,7 @@ was later [dropped from the spec][html5]. There remains as well as how to support content types other than form-encoded data. [cite]: http://www.amazon.com/Restful-Web-Services-Leonard-Richardson/dp/0596529260 -[ajax-form]: https://github.com/tomchristie/ajax-form +[ajax-form]: https://github.com/encode/ajax-form [rails]: http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work [html5]: http://www.w3.org/TR/html5-diff/#changes-2010-06-24 [put_delete]: http://amundsen.com/examples/put-delete-forms/ diff --git a/docs/topics/contributing.md b/docs/topics/contributing.md index ed7717ae2..9a413832f 100644 --- a/docs/topics/contributing.md +++ b/docs/topics/contributing.md @@ -50,7 +50,7 @@ Getting involved in triaging incoming issues is a good way to start contributing To start developing on Django REST framework, clone the repo: - git clone git@github.com:tomchristie/django-rest-framework.git + git clone git@github.com:encode/django-rest-framework.git Changes should broadly follow the [PEP 8][pep-8] style conventions, and we recommend you set up your editor to automatically indicate non-conforming styles. @@ -202,11 +202,11 @@ If you want to draw attention to a note or warning, use a pair of enclosing line [code-of-conduct]: https://www.djangoproject.com/conduct/ [google-group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework [so-filter]: http://stackexchange.com/filters/66475/rest-framework -[issues]: https://github.com/tomchristie/django-rest-framework/issues?state=open +[issues]: https://github.com/encode/django-rest-framework/issues?state=open [pep-8]: http://www.python.org/dev/peps/pep-0008/ [travis-status]: ../img/travis-status.png [pull-requests]: https://help.github.com/articles/using-pull-requests [tox]: https://tox.readthedocs.io/en/latest/ [markdown]: http://daringfireball.net/projects/markdown/basics -[docs]: https://github.com/tomchristie/django-rest-framework/tree/master/docs +[docs]: https://github.com/encode/django-rest-framework/tree/master/docs [mou]: http://mouapp.com/ diff --git a/docs/topics/internationalization.md b/docs/topics/internationalization.md index 3968e23d1..f7efbf697 100644 --- a/docs/topics/internationalization.md +++ b/docs/topics/internationalization.md @@ -81,7 +81,7 @@ If you're translating a new language you'll need to translate the existing REST 4. Edit the `django.po` file you've just copied, translating all the error messages. -5. Run `manage.py compilemessages -l pt_BR` to make the translations +5. Run `manage.py compilemessages -l pt_BR` to make the translations available for Django to use. You should see a message like `processing file django.po in <...>/locale/pt_BR/LC_MESSAGES`. 6. Restart your development server to see the changes take effect. @@ -106,7 +106,7 @@ For API clients the most appropriate of these will typically be to use the `Acce [django-translation]: https://docs.djangoproject.com/en/1.7/topics/i18n/translation [custom-exception-handler]: ../api-guide/exceptions.md#custom-exception-handling [transifex-project]: https://www.transifex.com/projects/p/django-rest-framework/ -[django-po-source]: https://raw.githubusercontent.com/tomchristie/django-rest-framework/master/rest_framework/locale/en_US/LC_MESSAGES/django.po +[django-po-source]: https://raw.githubusercontent.com/encode/django-rest-framework/master/rest_framework/locale/en_US/LC_MESSAGES/django.po [django-language-preference]: https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#how-django-discovers-language-preference [django-locale-paths]: https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-LOCALE_PATHS [django-locale-name]: https://docs.djangoproject.com/en/1.7/topics/i18n/#term-locale-name diff --git a/docs/topics/jobs.md b/docs/topics/jobs.md index 53605bd4f..123d8b9d9 100644 --- a/docs/topics/jobs.md +++ b/docs/topics/jobs.md @@ -35,5 +35,5 @@ Wonder how else you can help? One of the best ways you can help Django REST Fram [remoteok-io]: https://remoteok.io/remote-django-jobs [remotepython-com]: https://www.remotepython.com/jobs/ [drf-funding]: https://fund.django-rest-framework.org/topics/funding/ -[submit-pr]: https://github.com/tomchristie/django-rest-framework +[submit-pr]: https://github.com/encode/django-rest-framework [anna-email]: mailto:anna@django-rest-framework.org diff --git a/docs/topics/project-management.md b/docs/topics/project-management.md index 37e5c6882..cc86c968a 100644 --- a/docs/topics/project-management.md +++ b/docs/topics/project-management.md @@ -17,9 +17,9 @@ We have a quarterly maintenance cycle where new members may join the maintenance #### Current team -The [maintenance team for Q4 2015](https://github.com/tomchristie/django-rest-framework/issues/2190): +The [maintenance team for Q4 2015](https://github.com/encode/django-rest-framework/issues/2190): -* [@tomchristie](https://github.com/tomchristie/) +* [@tomchristie](https://github.com/encode/) * [@xordoquy](https://github.com/xordoquy/) (Release manager.) * [@carltongibson](https://github.com/carltongibson/) * [@kevin-brown](https://github.com/kevin-brown/) @@ -104,9 +104,9 @@ The following template should be used for the description of the issue, and serv Checklist: - - [ ] Create pull request for [release notes](https://github.com/tomchristie/django-rest-framework/blob/master/docs/topics/release-notes.md) based on the [*.*.* milestone](https://github.com/tomchristie/django-rest-framework/milestones/***). + - [ ] Create pull request for [release notes](https://github.com/encode/django-rest-framework/blob/master/docs/topics/release-notes.md) based on the [*.*.* milestone](https://github.com/encode/django-rest-framework/milestones/***). - [ ] Update the translations from [transifex](http://www.django-rest-framework.org/topics/project-management/#translations). - - [ ] Ensure the pull request increments the version to `*.*.*` in [`restframework/__init__.py`](https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/__init__.py). + - [ ] Ensure the pull request increments the version to `*.*.*` in [`restframework/__init__.py`](https://github.com/encode/django-rest-framework/blob/master/rest_framework/__init__.py). - [ ] Confirm with @tomchristie that release is finalized and ready to go. - [ ] Ensure that release date is included in pull request. - [ ] Merge the release pull request. @@ -197,10 +197,10 @@ The following issues still need to be addressed: * Document ownership and management of the security mailing list. [bus-factor]: http://en.wikipedia.org/wiki/Bus_factor -[un-triaged]: https://github.com/tomchristie/django-rest-framework/issues?q=is%3Aopen+no%3Alabel +[un-triaged]: https://github.com/encode/django-rest-framework/issues?q=is%3Aopen+no%3Alabel [transifex-project]: https://www.transifex.com/projects/p/django-rest-framework/ [transifex-client]: https://pypi.python.org/pypi/transifex-client [translation-memory]: http://docs.transifex.com/guides/tm#let-tm-automatically-populate-translations -[github-org]: https://github.com/tomchristie/django-rest-framework/issues/2162 +[github-org]: https://github.com/encode/django-rest-framework/issues/2162 [sandbox]: http://restframework.herokuapp.com/ [mailing-list]: https://groups.google.com/forum/#!forum/django-rest-framework diff --git a/docs/topics/release-notes.md b/docs/topics/release-notes.md index 56c364f43..dd7054f75 100644 --- a/docs/topics/release-notes.md +++ b/docs/topics/release-notes.md @@ -644,657 +644,657 @@ For older release notes, [please see the version 2.x documentation][old-release- [deprecation-policy]: #deprecation-policy [django-deprecation-policy]: https://docs.djangoproject.com/en/stable/internals/release-process/#internal-release-deprecation-policy [defusedxml-announce]: http://blog.python.org/2013/02/announcing-defusedxml-fixes-for-xml.html -[743]: https://github.com/tomchristie/django-rest-framework/pull/743 +[743]: https://github.com/encode/django-rest-framework/pull/743 [staticfiles14]: https://docs.djangoproject.com/en/1.4/howto/static-files/#with-a-template-tag [staticfiles13]: https://docs.djangoproject.com/en/1.3/howto/static-files/#with-a-template-tag [2.1.0-notes]: https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion -[ticket-582]: https://github.com/tomchristie/django-rest-framework/issues/582 +[ticket-582]: https://github.com/encode/django-rest-framework/issues/582 [rfc-6266]: http://tools.ietf.org/html/rfc6266#section-4.3 -[old-release-notes]: https://github.com/tomchristie/django-rest-framework/blob/version-2.4.x/docs/topics/release-notes.md +[old-release-notes]: https://github.com/encode/django-rest-framework/blob/version-2.4.x/docs/topics/release-notes.md [3.6-release]: 3.6-announcement.md -[3.0.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.1+Release%22 -[3.0.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.2+Release%22 -[3.0.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.3+Release%22 -[3.0.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.4+Release%22 -[3.0.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.5+Release%22 -[3.1.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.0+Release%22 -[3.1.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.1+Release%22 -[3.1.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.2+Release%22 -[3.1.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.3+Release%22 -[3.2.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.0+Release%22 -[3.2.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.1+Release%22 -[3.2.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.2+Release%22 -[3.2.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.3+Release%22 -[3.2.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.4+Release%22 -[3.2.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.5+Release%22 -[3.3.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.0+Release%22 -[3.3.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.1+Release%22 -[3.3.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.2+Release%22 -[3.3.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.3+Release%22 -[3.4.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.0+Release%22 -[3.4.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.1+Release%22 -[3.4.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.2+Release%22 -[3.4.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.3+Release%22 -[3.4.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.4+Release%22 -[3.4.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.5+Release%22 -[3.4.6-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.6+Release%22 -[3.4.7-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.4.7+Release%22 -[3.5.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.5.0+Release%22 -[3.5.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.5.1+Release%22 -[3.5.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.5.2+Release%22 -[3.5.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.5.3+Release%22 -[3.5.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.5.4+Release%22 -[3.6.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.6.0+Release%22 -[3.6.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.6.1+Release%22 -[3.6.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.6.2+Release%22 +[3.0.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.1+Release%22 +[3.0.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.2+Release%22 +[3.0.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.3+Release%22 +[3.0.4-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.4+Release%22 +[3.0.5-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.0.5+Release%22 +[3.1.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.1.0+Release%22 +[3.1.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.1.1+Release%22 +[3.1.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.1.2+Release%22 +[3.1.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.1.3+Release%22 +[3.2.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.0+Release%22 +[3.2.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.1+Release%22 +[3.2.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.2+Release%22 +[3.2.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.3+Release%22 +[3.2.4-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.4+Release%22 +[3.2.5-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.2.5+Release%22 +[3.3.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.3.0+Release%22 +[3.3.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.3.1+Release%22 +[3.3.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.3.2+Release%22 +[3.3.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.3.3+Release%22 +[3.4.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.0+Release%22 +[3.4.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.1+Release%22 +[3.4.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.2+Release%22 +[3.4.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.3+Release%22 +[3.4.4-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.4+Release%22 +[3.4.5-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.5+Release%22 +[3.4.6-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.6+Release%22 +[3.4.7-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.4.7+Release%22 +[3.5.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.0+Release%22 +[3.5.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.1+Release%22 +[3.5.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.2+Release%22 +[3.5.3-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.3+Release%22 +[3.5.4-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.5.4+Release%22 +[3.6.0-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.6.0+Release%22 +[3.6.1-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.6.1+Release%22 +[3.6.2-milestone]: https://github.com/encode/django-rest-framework/issues?q=milestone%3A%223.6.2+Release%22 -[gh2013]: https://github.com/tomchristie/django-rest-framework/issues/2013 -[gh2098]: https://github.com/tomchristie/django-rest-framework/issues/2098 -[gh2109]: https://github.com/tomchristie/django-rest-framework/issues/2109 -[gh2135]: https://github.com/tomchristie/django-rest-framework/issues/2135 -[gh2163]: https://github.com/tomchristie/django-rest-framework/issues/2163 -[gh2168]: https://github.com/tomchristie/django-rest-framework/issues/2168 -[gh2169]: https://github.com/tomchristie/django-rest-framework/issues/2169 -[gh2172]: https://github.com/tomchristie/django-rest-framework/issues/2172 -[gh2175]: https://github.com/tomchristie/django-rest-framework/issues/2175 -[gh2184]: https://github.com/tomchristie/django-rest-framework/issues/2184 -[gh2187]: https://github.com/tomchristie/django-rest-framework/issues/2187 -[gh2193]: https://github.com/tomchristie/django-rest-framework/issues/2193 -[gh2194]: https://github.com/tomchristie/django-rest-framework/issues/2194 -[gh2195]: https://github.com/tomchristie/django-rest-framework/issues/2195 -[gh2196]: https://github.com/tomchristie/django-rest-framework/issues/2196 -[gh2197]: https://github.com/tomchristie/django-rest-framework/issues/2197 -[gh2200]: https://github.com/tomchristie/django-rest-framework/issues/2200 -[gh2202]: https://github.com/tomchristie/django-rest-framework/issues/2202 -[gh2205]: https://github.com/tomchristie/django-rest-framework/issues/2205 -[gh2213]: https://github.com/tomchristie/django-rest-framework/issues/2213 -[gh2213]: https://github.com/tomchristie/django-rest-framework/issues/2213 -[gh2215]: https://github.com/tomchristie/django-rest-framework/issues/2215 -[gh2225]: https://github.com/tomchristie/django-rest-framework/issues/2225 -[gh2231]: https://github.com/tomchristie/django-rest-framework/issues/2231 -[gh2232]: https://github.com/tomchristie/django-rest-framework/issues/2232 -[gh2239]: https://github.com/tomchristie/django-rest-framework/issues/2239 -[gh2242]: https://github.com/tomchristie/django-rest-framework/issues/2242 -[gh2243]: https://github.com/tomchristie/django-rest-framework/issues/2243 -[gh2244]: https://github.com/tomchristie/django-rest-framework/issues/2244 +[gh2013]: https://github.com/encode/django-rest-framework/issues/2013 +[gh2098]: https://github.com/encode/django-rest-framework/issues/2098 +[gh2109]: https://github.com/encode/django-rest-framework/issues/2109 +[gh2135]: https://github.com/encode/django-rest-framework/issues/2135 +[gh2163]: https://github.com/encode/django-rest-framework/issues/2163 +[gh2168]: https://github.com/encode/django-rest-framework/issues/2168 +[gh2169]: https://github.com/encode/django-rest-framework/issues/2169 +[gh2172]: https://github.com/encode/django-rest-framework/issues/2172 +[gh2175]: https://github.com/encode/django-rest-framework/issues/2175 +[gh2184]: https://github.com/encode/django-rest-framework/issues/2184 +[gh2187]: https://github.com/encode/django-rest-framework/issues/2187 +[gh2193]: https://github.com/encode/django-rest-framework/issues/2193 +[gh2194]: https://github.com/encode/django-rest-framework/issues/2194 +[gh2195]: https://github.com/encode/django-rest-framework/issues/2195 +[gh2196]: https://github.com/encode/django-rest-framework/issues/2196 +[gh2197]: https://github.com/encode/django-rest-framework/issues/2197 +[gh2200]: https://github.com/encode/django-rest-framework/issues/2200 +[gh2202]: https://github.com/encode/django-rest-framework/issues/2202 +[gh2205]: https://github.com/encode/django-rest-framework/issues/2205 +[gh2213]: https://github.com/encode/django-rest-framework/issues/2213 +[gh2213]: https://github.com/encode/django-rest-framework/issues/2213 +[gh2215]: https://github.com/encode/django-rest-framework/issues/2215 +[gh2225]: https://github.com/encode/django-rest-framework/issues/2225 +[gh2231]: https://github.com/encode/django-rest-framework/issues/2231 +[gh2232]: https://github.com/encode/django-rest-framework/issues/2232 +[gh2239]: https://github.com/encode/django-rest-framework/issues/2239 +[gh2242]: https://github.com/encode/django-rest-framework/issues/2242 +[gh2243]: https://github.com/encode/django-rest-framework/issues/2243 +[gh2244]: https://github.com/encode/django-rest-framework/issues/2244 -[gh2155]: https://github.com/tomchristie/django-rest-framework/issues/2155 -[gh2218]: https://github.com/tomchristie/django-rest-framework/issues/2218 -[gh2228]: https://github.com/tomchristie/django-rest-framework/issues/2228 -[gh2234]: https://github.com/tomchristie/django-rest-framework/issues/2234 -[gh2255]: https://github.com/tomchristie/django-rest-framework/issues/2255 -[gh2259]: https://github.com/tomchristie/django-rest-framework/issues/2259 -[gh2262]: https://github.com/tomchristie/django-rest-framework/issues/2262 -[gh2263]: https://github.com/tomchristie/django-rest-framework/issues/2263 -[gh2266]: https://github.com/tomchristie/django-rest-framework/issues/2266 -[gh2267]: https://github.com/tomchristie/django-rest-framework/issues/2267 -[gh2270]: https://github.com/tomchristie/django-rest-framework/issues/2270 -[gh2279]: https://github.com/tomchristie/django-rest-framework/issues/2279 -[gh2280]: https://github.com/tomchristie/django-rest-framework/issues/2280 -[gh2289]: https://github.com/tomchristie/django-rest-framework/issues/2289 -[gh2290]: https://github.com/tomchristie/django-rest-framework/issues/2290 -[gh2291]: https://github.com/tomchristie/django-rest-framework/issues/2291 -[gh2294]: https://github.com/tomchristie/django-rest-framework/issues/2294 +[gh2155]: https://github.com/encode/django-rest-framework/issues/2155 +[gh2218]: https://github.com/encode/django-rest-framework/issues/2218 +[gh2228]: https://github.com/encode/django-rest-framework/issues/2228 +[gh2234]: https://github.com/encode/django-rest-framework/issues/2234 +[gh2255]: https://github.com/encode/django-rest-framework/issues/2255 +[gh2259]: https://github.com/encode/django-rest-framework/issues/2259 +[gh2262]: https://github.com/encode/django-rest-framework/issues/2262 +[gh2263]: https://github.com/encode/django-rest-framework/issues/2263 +[gh2266]: https://github.com/encode/django-rest-framework/issues/2266 +[gh2267]: https://github.com/encode/django-rest-framework/issues/2267 +[gh2270]: https://github.com/encode/django-rest-framework/issues/2270 +[gh2279]: https://github.com/encode/django-rest-framework/issues/2279 +[gh2280]: https://github.com/encode/django-rest-framework/issues/2280 +[gh2289]: https://github.com/encode/django-rest-framework/issues/2289 +[gh2290]: https://github.com/encode/django-rest-framework/issues/2290 +[gh2291]: https://github.com/encode/django-rest-framework/issues/2291 +[gh2294]: https://github.com/encode/django-rest-framework/issues/2294 -[gh1101]: https://github.com/tomchristie/django-rest-framework/issues/1101 -[gh2010]: https://github.com/tomchristie/django-rest-framework/issues/2010 -[gh2278]: https://github.com/tomchristie/django-rest-framework/issues/2278 -[gh2283]: https://github.com/tomchristie/django-rest-framework/issues/2283 -[gh2287]: https://github.com/tomchristie/django-rest-framework/issues/2287 -[gh2311]: https://github.com/tomchristie/django-rest-framework/issues/2311 -[gh2315]: https://github.com/tomchristie/django-rest-framework/issues/2315 -[gh2317]: https://github.com/tomchristie/django-rest-framework/issues/2317 -[gh2319]: https://github.com/tomchristie/django-rest-framework/issues/2319 -[gh2327]: https://github.com/tomchristie/django-rest-framework/issues/2327 -[gh2330]: https://github.com/tomchristie/django-rest-framework/issues/2330 -[gh2331]: https://github.com/tomchristie/django-rest-framework/issues/2331 -[gh2340]: https://github.com/tomchristie/django-rest-framework/issues/2340 -[gh2342]: https://github.com/tomchristie/django-rest-framework/issues/2342 -[gh2351]: https://github.com/tomchristie/django-rest-framework/issues/2351 -[gh2355]: https://github.com/tomchristie/django-rest-framework/issues/2355 -[gh2369]: https://github.com/tomchristie/django-rest-framework/issues/2369 -[gh2386]: https://github.com/tomchristie/django-rest-framework/issues/2386 +[gh1101]: https://github.com/encode/django-rest-framework/issues/1101 +[gh2010]: https://github.com/encode/django-rest-framework/issues/2010 +[gh2278]: https://github.com/encode/django-rest-framework/issues/2278 +[gh2283]: https://github.com/encode/django-rest-framework/issues/2283 +[gh2287]: https://github.com/encode/django-rest-framework/issues/2287 +[gh2311]: https://github.com/encode/django-rest-framework/issues/2311 +[gh2315]: https://github.com/encode/django-rest-framework/issues/2315 +[gh2317]: https://github.com/encode/django-rest-framework/issues/2317 +[gh2319]: https://github.com/encode/django-rest-framework/issues/2319 +[gh2327]: https://github.com/encode/django-rest-framework/issues/2327 +[gh2330]: https://github.com/encode/django-rest-framework/issues/2330 +[gh2331]: https://github.com/encode/django-rest-framework/issues/2331 +[gh2340]: https://github.com/encode/django-rest-framework/issues/2340 +[gh2342]: https://github.com/encode/django-rest-framework/issues/2342 +[gh2351]: https://github.com/encode/django-rest-framework/issues/2351 +[gh2355]: https://github.com/encode/django-rest-framework/issues/2355 +[gh2369]: https://github.com/encode/django-rest-framework/issues/2369 +[gh2386]: https://github.com/encode/django-rest-framework/issues/2386 -[gh2425]: https://github.com/tomchristie/django-rest-framework/issues/2425 -[gh2446]: https://github.com/tomchristie/django-rest-framework/issues/2446 -[gh2441]: https://github.com/tomchristie/django-rest-framework/issues/2441 -[gh2451]: https://github.com/tomchristie/django-rest-framework/issues/2451 -[gh2106]: https://github.com/tomchristie/django-rest-framework/issues/2106 -[gh2448]: https://github.com/tomchristie/django-rest-framework/issues/2448 -[gh2433]: https://github.com/tomchristie/django-rest-framework/issues/2433 -[gh2432]: https://github.com/tomchristie/django-rest-framework/issues/2432 -[gh2434]: https://github.com/tomchristie/django-rest-framework/issues/2434 -[gh2430]: https://github.com/tomchristie/django-rest-framework/issues/2430 -[gh2421]: https://github.com/tomchristie/django-rest-framework/issues/2421 -[gh2410]: https://github.com/tomchristie/django-rest-framework/issues/2410 -[gh2408]: https://github.com/tomchristie/django-rest-framework/issues/2408 -[gh2401]: https://github.com/tomchristie/django-rest-framework/issues/2401 -[gh2400]: https://github.com/tomchristie/django-rest-framework/issues/2400 -[gh2399]: https://github.com/tomchristie/django-rest-framework/issues/2399 -[gh2388]: https://github.com/tomchristie/django-rest-framework/issues/2388 -[gh2360]: https://github.com/tomchristie/django-rest-framework/issues/2360 +[gh2425]: https://github.com/encode/django-rest-framework/issues/2425 +[gh2446]: https://github.com/encode/django-rest-framework/issues/2446 +[gh2441]: https://github.com/encode/django-rest-framework/issues/2441 +[gh2451]: https://github.com/encode/django-rest-framework/issues/2451 +[gh2106]: https://github.com/encode/django-rest-framework/issues/2106 +[gh2448]: https://github.com/encode/django-rest-framework/issues/2448 +[gh2433]: https://github.com/encode/django-rest-framework/issues/2433 +[gh2432]: https://github.com/encode/django-rest-framework/issues/2432 +[gh2434]: https://github.com/encode/django-rest-framework/issues/2434 +[gh2430]: https://github.com/encode/django-rest-framework/issues/2430 +[gh2421]: https://github.com/encode/django-rest-framework/issues/2421 +[gh2410]: https://github.com/encode/django-rest-framework/issues/2410 +[gh2408]: https://github.com/encode/django-rest-framework/issues/2408 +[gh2401]: https://github.com/encode/django-rest-framework/issues/2401 +[gh2400]: https://github.com/encode/django-rest-framework/issues/2400 +[gh2399]: https://github.com/encode/django-rest-framework/issues/2399 +[gh2388]: https://github.com/encode/django-rest-framework/issues/2388 +[gh2360]: https://github.com/encode/django-rest-framework/issues/2360 -[gh1850]: https://github.com/tomchristie/django-rest-framework/issues/1850 -[gh2108]: https://github.com/tomchristie/django-rest-framework/issues/2108 -[gh2475]: https://github.com/tomchristie/django-rest-framework/issues/2475 -[gh2479]: https://github.com/tomchristie/django-rest-framework/issues/2479 -[gh2486]: https://github.com/tomchristie/django-rest-framework/issues/2486 -[gh2492]: https://github.com/tomchristie/django-rest-framework/issues/2492 -[gh2518]: https://github.com/tomchristie/django-rest-framework/issues/2518 -[gh2519]: https://github.com/tomchristie/django-rest-framework/issues/2519 -[gh2524]: https://github.com/tomchristie/django-rest-framework/issues/2524 -[gh2530]: https://github.com/tomchristie/django-rest-framework/issues/2530 +[gh1850]: https://github.com/encode/django-rest-framework/issues/1850 +[gh2108]: https://github.com/encode/django-rest-framework/issues/2108 +[gh2475]: https://github.com/encode/django-rest-framework/issues/2475 +[gh2479]: https://github.com/encode/django-rest-framework/issues/2479 +[gh2486]: https://github.com/encode/django-rest-framework/issues/2486 +[gh2492]: https://github.com/encode/django-rest-framework/issues/2492 +[gh2518]: https://github.com/encode/django-rest-framework/issues/2518 +[gh2519]: https://github.com/encode/django-rest-framework/issues/2519 +[gh2524]: https://github.com/encode/django-rest-framework/issues/2524 +[gh2530]: https://github.com/encode/django-rest-framework/issues/2530 -[gh2691]: https://github.com/tomchristie/django-rest-framework/issues/2691 -[gh2685]: https://github.com/tomchristie/django-rest-framework/issues/2685 -[gh2591]: https://github.com/tomchristie/django-rest-framework/issues/2591 -[gh2678]: https://github.com/tomchristie/django-rest-framework/issues/2678 -[gh2667]: https://github.com/tomchristie/django-rest-framework/issues/2667 -[gh2700]: https://github.com/tomchristie/django-rest-framework/issues/2700 -[gh2645]: https://github.com/tomchristie/django-rest-framework/issues/2645 -[gh2640]: https://github.com/tomchristie/django-rest-framework/issues/2640 -[gh2637]: https://github.com/tomchristie/django-rest-framework/issues/2637 -[gh2641]: https://github.com/tomchristie/django-rest-framework/issues/2641 -[gh2631]: https://github.com/tomchristie/django-rest-framework/issues/2631 -[gh2741]: https://github.com/tomchristie/django-rest-framework/issues/2641 -[gh2743]: https://github.com/tomchristie/django-rest-framework/issues/2643 +[gh2691]: https://github.com/encode/django-rest-framework/issues/2691 +[gh2685]: https://github.com/encode/django-rest-framework/issues/2685 +[gh2591]: https://github.com/encode/django-rest-framework/issues/2591 +[gh2678]: https://github.com/encode/django-rest-framework/issues/2678 +[gh2667]: https://github.com/encode/django-rest-framework/issues/2667 +[gh2700]: https://github.com/encode/django-rest-framework/issues/2700 +[gh2645]: https://github.com/encode/django-rest-framework/issues/2645 +[gh2640]: https://github.com/encode/django-rest-framework/issues/2640 +[gh2637]: https://github.com/encode/django-rest-framework/issues/2637 +[gh2641]: https://github.com/encode/django-rest-framework/issues/2641 +[gh2631]: https://github.com/encode/django-rest-framework/issues/2631 +[gh2741]: https://github.com/encode/django-rest-framework/issues/2641 +[gh2743]: https://github.com/encode/django-rest-framework/issues/2643 -[gh2656]: https://github.com/tomchristie/django-rest-framework/issues/2656 -[gh2687]: https://github.com/tomchristie/django-rest-framework/issues/2687 -[gh2869]: https://github.com/tomchristie/django-rest-framework/issues/2869 -[gh2764]: https://github.com/tomchristie/django-rest-framework/issues/2764 -[gh2763]: https://github.com/tomchristie/django-rest-framework/issues/2763 -[gh2757]: https://github.com/tomchristie/django-rest-framework/issues/2757 -[gh2630]: https://github.com/tomchristie/django-rest-framework/issues/2630 -[gh2724]: https://github.com/tomchristie/django-rest-framework/issues/2724 -[gh2711]: https://github.com/tomchristie/django-rest-framework/issues/2711 -[gh2745]: https://github.com/tomchristie/django-rest-framework/issues/2745 -[gh2754]: https://github.com/tomchristie/django-rest-framework/issues/2754 -[gh2762]: https://github.com/tomchristie/django-rest-framework/issues/2762 -[gh2798]: https://github.com/tomchristie/django-rest-framework/issues/2798 -[gh2807]: https://github.com/tomchristie/django-rest-framework/issues/2807 -[gh2818]: https://github.com/tomchristie/django-rest-framework/issues/2818 -[gh2835]: https://github.com/tomchristie/django-rest-framework/issues/2835 -[gh2836]: https://github.com/tomchristie/django-rest-framework/issues/2836 -[gh2853]: https://github.com/tomchristie/django-rest-framework/issues/2853 -[gh2862]: https://github.com/tomchristie/django-rest-framework/issues/2862 -[gh2863]: https://github.com/tomchristie/django-rest-framework/issues/2863 -[gh2868]: https://github.com/tomchristie/django-rest-framework/issues/2868 -[gh2905]: https://github.com/tomchristie/django-rest-framework/issues/2905 +[gh2656]: https://github.com/encode/django-rest-framework/issues/2656 +[gh2687]: https://github.com/encode/django-rest-framework/issues/2687 +[gh2869]: https://github.com/encode/django-rest-framework/issues/2869 +[gh2764]: https://github.com/encode/django-rest-framework/issues/2764 +[gh2763]: https://github.com/encode/django-rest-framework/issues/2763 +[gh2757]: https://github.com/encode/django-rest-framework/issues/2757 +[gh2630]: https://github.com/encode/django-rest-framework/issues/2630 +[gh2724]: https://github.com/encode/django-rest-framework/issues/2724 +[gh2711]: https://github.com/encode/django-rest-framework/issues/2711 +[gh2745]: https://github.com/encode/django-rest-framework/issues/2745 +[gh2754]: https://github.com/encode/django-rest-framework/issues/2754 +[gh2762]: https://github.com/encode/django-rest-framework/issues/2762 +[gh2798]: https://github.com/encode/django-rest-framework/issues/2798 +[gh2807]: https://github.com/encode/django-rest-framework/issues/2807 +[gh2818]: https://github.com/encode/django-rest-framework/issues/2818 +[gh2835]: https://github.com/encode/django-rest-framework/issues/2835 +[gh2836]: https://github.com/encode/django-rest-framework/issues/2836 +[gh2853]: https://github.com/encode/django-rest-framework/issues/2853 +[gh2862]: https://github.com/encode/django-rest-framework/issues/2862 +[gh2863]: https://github.com/encode/django-rest-framework/issues/2863 +[gh2868]: https://github.com/encode/django-rest-framework/issues/2868 +[gh2905]: https://github.com/encode/django-rest-framework/issues/2905 -[gh2481]: https://github.com/tomchristie/django-rest-framework/issues/2481 -[gh2989]: https://github.com/tomchristie/django-rest-framework/issues/2989 -[gh2788]: https://github.com/tomchristie/django-rest-framework/issues/2788 -[gh3000]: https://github.com/tomchristie/django-rest-framework/issues/3000 -[gh2993]: https://github.com/tomchristie/django-rest-framework/issues/2993 -[gh2894]: https://github.com/tomchristie/django-rest-framework/issues/2894 -[gh2981]: https://github.com/tomchristie/django-rest-framework/issues/2981 -[gh2811]: https://github.com/tomchristie/django-rest-framework/issues/2811 -[gh2975]: https://github.com/tomchristie/django-rest-framework/issues/2975 -[gh2839]: https://github.com/tomchristie/django-rest-framework/issues/2839 -[gh2940]: https://github.com/tomchristie/django-rest-framework/issues/2940 -[gh2887]: https://github.com/tomchristie/django-rest-framework/issues/2887 -[gh2034]: https://github.com/tomchristie/django-rest-framework/issues/2034 -[gh2933]: https://github.com/tomchristie/django-rest-framework/issues/2933 -[gh2948]: https://github.com/tomchristie/django-rest-framework/issues/2948 -[gh2947]: https://github.com/tomchristie/django-rest-framework/issues/2947 -[gh2952]: https://github.com/tomchristie/django-rest-framework/issues/2952 -[gh2747]: https://github.com/tomchristie/django-rest-framework/issues/2747 -[gh2618]: https://github.com/tomchristie/django-rest-framework/issues/2618 -[gh3008]: https://github.com/tomchristie/django-rest-framework/issues/3008 -[gh2695]: https://github.com/tomchristie/django-rest-framework/issues/2695 +[gh2481]: https://github.com/encode/django-rest-framework/issues/2481 +[gh2989]: https://github.com/encode/django-rest-framework/issues/2989 +[gh2788]: https://github.com/encode/django-rest-framework/issues/2788 +[gh3000]: https://github.com/encode/django-rest-framework/issues/3000 +[gh2993]: https://github.com/encode/django-rest-framework/issues/2993 +[gh2894]: https://github.com/encode/django-rest-framework/issues/2894 +[gh2981]: https://github.com/encode/django-rest-framework/issues/2981 +[gh2811]: https://github.com/encode/django-rest-framework/issues/2811 +[gh2975]: https://github.com/encode/django-rest-framework/issues/2975 +[gh2839]: https://github.com/encode/django-rest-framework/issues/2839 +[gh2940]: https://github.com/encode/django-rest-framework/issues/2940 +[gh2887]: https://github.com/encode/django-rest-framework/issues/2887 +[gh2034]: https://github.com/encode/django-rest-framework/issues/2034 +[gh2933]: https://github.com/encode/django-rest-framework/issues/2933 +[gh2948]: https://github.com/encode/django-rest-framework/issues/2948 +[gh2947]: https://github.com/encode/django-rest-framework/issues/2947 +[gh2952]: https://github.com/encode/django-rest-framework/issues/2952 +[gh2747]: https://github.com/encode/django-rest-framework/issues/2747 +[gh2618]: https://github.com/encode/django-rest-framework/issues/2618 +[gh3008]: https://github.com/encode/django-rest-framework/issues/3008 +[gh2695]: https://github.com/encode/django-rest-framework/issues/2695 -[gh1854]: https://github.com/tomchristie/django-rest-framework/issues/1854 -[gh2250]: https://github.com/tomchristie/django-rest-framework/issues/2250 -[gh2416]: https://github.com/tomchristie/django-rest-framework/issues/2416 -[gh2539]: https://github.com/tomchristie/django-rest-framework/issues/2539 -[gh2659]: https://github.com/tomchristie/django-rest-framework/issues/2659 -[gh2690]: https://github.com/tomchristie/django-rest-framework/issues/2690 -[gh2704]: https://github.com/tomchristie/django-rest-framework/issues/2704 -[gh2712]: https://github.com/tomchristie/django-rest-framework/issues/2712 -[gh2727]: https://github.com/tomchristie/django-rest-framework/issues/2727 -[gh2759]: https://github.com/tomchristie/django-rest-framework/issues/2759 -[gh2766]: https://github.com/tomchristie/django-rest-framework/issues/2766 -[gh2783]: https://github.com/tomchristie/django-rest-framework/issues/2783 -[gh2789]: https://github.com/tomchristie/django-rest-framework/issues/2789 -[gh2804]: https://github.com/tomchristie/django-rest-framework/issues/2804 -[gh2886]: https://github.com/tomchristie/django-rest-framework/issues/2886 -[gh2915]: https://github.com/tomchristie/django-rest-framework/issues/2915 -[gh2920]: https://github.com/tomchristie/django-rest-framework/issues/2920 -[gh2926]: https://github.com/tomchristie/django-rest-framework/issues/2926 -[gh2928]: https://github.com/tomchristie/django-rest-framework/issues/2928 -[gh2935]: https://github.com/tomchristie/django-rest-framework/issues/2935 -[gh3011]: https://github.com/tomchristie/django-rest-framework/issues/3011 -[gh3016]: https://github.com/tomchristie/django-rest-framework/issues/3016 -[gh3024]: https://github.com/tomchristie/django-rest-framework/issues/3024 -[gh3115]: https://github.com/tomchristie/django-rest-framework/issues/3115 -[gh3139]: https://github.com/tomchristie/django-rest-framework/issues/3139 -[gh3165]: https://github.com/tomchristie/django-rest-framework/issues/3165 -[gh3216]: https://github.com/tomchristie/django-rest-framework/issues/3216 -[gh3225]: https://github.com/tomchristie/django-rest-framework/issues/3225 +[gh1854]: https://github.com/encode/django-rest-framework/issues/1854 +[gh2250]: https://github.com/encode/django-rest-framework/issues/2250 +[gh2416]: https://github.com/encode/django-rest-framework/issues/2416 +[gh2539]: https://github.com/encode/django-rest-framework/issues/2539 +[gh2659]: https://github.com/encode/django-rest-framework/issues/2659 +[gh2690]: https://github.com/encode/django-rest-framework/issues/2690 +[gh2704]: https://github.com/encode/django-rest-framework/issues/2704 +[gh2712]: https://github.com/encode/django-rest-framework/issues/2712 +[gh2727]: https://github.com/encode/django-rest-framework/issues/2727 +[gh2759]: https://github.com/encode/django-rest-framework/issues/2759 +[gh2766]: https://github.com/encode/django-rest-framework/issues/2766 +[gh2783]: https://github.com/encode/django-rest-framework/issues/2783 +[gh2789]: https://github.com/encode/django-rest-framework/issues/2789 +[gh2804]: https://github.com/encode/django-rest-framework/issues/2804 +[gh2886]: https://github.com/encode/django-rest-framework/issues/2886 +[gh2915]: https://github.com/encode/django-rest-framework/issues/2915 +[gh2920]: https://github.com/encode/django-rest-framework/issues/2920 +[gh2926]: https://github.com/encode/django-rest-framework/issues/2926 +[gh2928]: https://github.com/encode/django-rest-framework/issues/2928 +[gh2935]: https://github.com/encode/django-rest-framework/issues/2935 +[gh3011]: https://github.com/encode/django-rest-framework/issues/3011 +[gh3016]: https://github.com/encode/django-rest-framework/issues/3016 +[gh3024]: https://github.com/encode/django-rest-framework/issues/3024 +[gh3115]: https://github.com/encode/django-rest-framework/issues/3115 +[gh3139]: https://github.com/encode/django-rest-framework/issues/3139 +[gh3165]: https://github.com/encode/django-rest-framework/issues/3165 +[gh3216]: https://github.com/encode/django-rest-framework/issues/3216 +[gh3225]: https://github.com/encode/django-rest-framework/issues/3225 -[gh3237]: https://github.com/tomchristie/django-rest-framework/issues/3237 -[gh3227]: https://github.com/tomchristie/django-rest-framework/issues/3227 -[gh3238]: https://github.com/tomchristie/django-rest-framework/issues/3238 -[gh3239]: https://github.com/tomchristie/django-rest-framework/issues/3239 +[gh3237]: https://github.com/encode/django-rest-framework/issues/3237 +[gh3227]: https://github.com/encode/django-rest-framework/issues/3227 +[gh3238]: https://github.com/encode/django-rest-framework/issues/3238 +[gh3239]: https://github.com/encode/django-rest-framework/issues/3239 -[gh3254]: https://github.com/tomchristie/django-rest-framework/issues/3254 -[gh3258]: https://github.com/tomchristie/django-rest-framework/issues/3258 -[gh2776]: https://github.com/tomchristie/django-rest-framework/issues/2776 -[gh3261]: https://github.com/tomchristie/django-rest-framework/issues/3261 -[gh3260]: https://github.com/tomchristie/django-rest-framework/issues/3260 -[gh3241]: https://github.com/tomchristie/django-rest-framework/issues/3241 +[gh3254]: https://github.com/encode/django-rest-framework/issues/3254 +[gh3258]: https://github.com/encode/django-rest-framework/issues/3258 +[gh2776]: https://github.com/encode/django-rest-framework/issues/2776 +[gh3261]: https://github.com/encode/django-rest-framework/issues/3261 +[gh3260]: https://github.com/encode/django-rest-framework/issues/3260 +[gh3241]: https://github.com/encode/django-rest-framework/issues/3241 -[gh3249]: https://github.com/tomchristie/django-rest-framework/issues/3249 -[gh3250]: https://github.com/tomchristie/django-rest-framework/issues/3250 -[gh3275]: https://github.com/tomchristie/django-rest-framework/issues/3275 -[gh3288]: https://github.com/tomchristie/django-rest-framework/issues/3288 -[gh3290]: https://github.com/tomchristie/django-rest-framework/issues/3290 -[gh3303]: https://github.com/tomchristie/django-rest-framework/issues/3303 -[gh3313]: https://github.com/tomchristie/django-rest-framework/issues/3313 -[gh3316]: https://github.com/tomchristie/django-rest-framework/issues/3316 -[gh3318]: https://github.com/tomchristie/django-rest-framework/issues/3318 -[gh3321]: https://github.com/tomchristie/django-rest-framework/issues/3321 +[gh3249]: https://github.com/encode/django-rest-framework/issues/3249 +[gh3250]: https://github.com/encode/django-rest-framework/issues/3250 +[gh3275]: https://github.com/encode/django-rest-framework/issues/3275 +[gh3288]: https://github.com/encode/django-rest-framework/issues/3288 +[gh3290]: https://github.com/encode/django-rest-framework/issues/3290 +[gh3303]: https://github.com/encode/django-rest-framework/issues/3303 +[gh3313]: https://github.com/encode/django-rest-framework/issues/3313 +[gh3316]: https://github.com/encode/django-rest-framework/issues/3316 +[gh3318]: https://github.com/encode/django-rest-framework/issues/3318 +[gh3321]: https://github.com/encode/django-rest-framework/issues/3321 -[gh2761]: https://github.com/tomchristie/django-rest-framework/issues/2761 -[gh3314]: https://github.com/tomchristie/django-rest-framework/issues/3314 -[gh3323]: https://github.com/tomchristie/django-rest-framework/issues/3323 -[gh3324]: https://github.com/tomchristie/django-rest-framework/issues/3324 -[gh3359]: https://github.com/tomchristie/django-rest-framework/issues/3359 -[gh3361]: https://github.com/tomchristie/django-rest-framework/issues/3361 -[gh3364]: https://github.com/tomchristie/django-rest-framework/issues/3364 -[gh3415]: https://github.com/tomchristie/django-rest-framework/issues/3415 +[gh2761]: https://github.com/encode/django-rest-framework/issues/2761 +[gh3314]: https://github.com/encode/django-rest-framework/issues/3314 +[gh3323]: https://github.com/encode/django-rest-framework/issues/3323 +[gh3324]: https://github.com/encode/django-rest-framework/issues/3324 +[gh3359]: https://github.com/encode/django-rest-framework/issues/3359 +[gh3361]: https://github.com/encode/django-rest-framework/issues/3361 +[gh3364]: https://github.com/encode/django-rest-framework/issues/3364 +[gh3415]: https://github.com/encode/django-rest-framework/issues/3415 -[gh3550]:https://github.com/tomchristie/django-rest-framework/issues/3550 +[gh3550]:https://github.com/encode/django-rest-framework/issues/3550 -[gh3315]: https://github.com/tomchristie/django-rest-framework/issues/3315 -[gh3410]: https://github.com/tomchristie/django-rest-framework/issues/3410 -[gh3435]: https://github.com/tomchristie/django-rest-framework/issues/3435 -[gh3450]: https://github.com/tomchristie/django-rest-framework/issues/3450 -[gh3454]: https://github.com/tomchristie/django-rest-framework/issues/3454 -[gh3475]: https://github.com/tomchristie/django-rest-framework/issues/3475 -[gh3495]: https://github.com/tomchristie/django-rest-framework/issues/3495 -[gh3509]: https://github.com/tomchristie/django-rest-framework/issues/3509 -[gh3421]: https://github.com/tomchristie/django-rest-framework/issues/3421 -[gh3525]: https://github.com/tomchristie/django-rest-framework/issues/3525 -[gh3526]: https://github.com/tomchristie/django-rest-framework/issues/3526 -[gh3429]: https://github.com/tomchristie/django-rest-framework/issues/3429 -[gh3536]: https://github.com/tomchristie/django-rest-framework/issues/3536 +[gh3315]: https://github.com/encode/django-rest-framework/issues/3315 +[gh3410]: https://github.com/encode/django-rest-framework/issues/3410 +[gh3435]: https://github.com/encode/django-rest-framework/issues/3435 +[gh3450]: https://github.com/encode/django-rest-framework/issues/3450 +[gh3454]: https://github.com/encode/django-rest-framework/issues/3454 +[gh3475]: https://github.com/encode/django-rest-framework/issues/3475 +[gh3495]: https://github.com/encode/django-rest-framework/issues/3495 +[gh3509]: https://github.com/encode/django-rest-framework/issues/3509 +[gh3421]: https://github.com/encode/django-rest-framework/issues/3421 +[gh3525]: https://github.com/encode/django-rest-framework/issues/3525 +[gh3526]: https://github.com/encode/django-rest-framework/issues/3526 +[gh3429]: https://github.com/encode/django-rest-framework/issues/3429 +[gh3536]: https://github.com/encode/django-rest-framework/issues/3536 -[gh3556]: https://github.com/tomchristie/django-rest-framework/issues/3556 -[gh3560]: https://github.com/tomchristie/django-rest-framework/issues/3560 -[gh3564]: https://github.com/tomchristie/django-rest-framework/issues/3564 -[gh3568]: https://github.com/tomchristie/django-rest-framework/issues/3568 -[gh3592]: https://github.com/tomchristie/django-rest-framework/issues/3592 -[gh3593]: https://github.com/tomchristie/django-rest-framework/issues/3593 +[gh3556]: https://github.com/encode/django-rest-framework/issues/3556 +[gh3560]: https://github.com/encode/django-rest-framework/issues/3560 +[gh3564]: https://github.com/encode/django-rest-framework/issues/3564 +[gh3568]: https://github.com/encode/django-rest-framework/issues/3568 +[gh3592]: https://github.com/encode/django-rest-framework/issues/3592 +[gh3593]: https://github.com/encode/django-rest-framework/issues/3593 -[gh3228]: https://github.com/tomchristie/django-rest-framework/issues/3228 -[gh3252]: https://github.com/tomchristie/django-rest-framework/issues/3252 -[gh3513]: https://github.com/tomchristie/django-rest-framework/issues/3513 -[gh3534]: https://github.com/tomchristie/django-rest-framework/issues/3534 -[gh3578]: https://github.com/tomchristie/django-rest-framework/issues/3578 -[gh3596]: https://github.com/tomchristie/django-rest-framework/issues/3596 -[gh3597]: https://github.com/tomchristie/django-rest-framework/issues/3597 -[gh3600]: https://github.com/tomchristie/django-rest-framework/issues/3600 -[gh3626]: https://github.com/tomchristie/django-rest-framework/issues/3626 -[gh3628]: https://github.com/tomchristie/django-rest-framework/issues/3628 -[gh3631]: https://github.com/tomchristie/django-rest-framework/issues/3631 -[gh3634]: https://github.com/tomchristie/django-rest-framework/issues/3634 -[gh3635]: https://github.com/tomchristie/django-rest-framework/issues/3635 -[gh3654]: https://github.com/tomchristie/django-rest-framework/issues/3654 -[gh3655]: https://github.com/tomchristie/django-rest-framework/issues/3655 -[gh3656]: https://github.com/tomchristie/django-rest-framework/issues/3656 -[gh3662]: https://github.com/tomchristie/django-rest-framework/issues/3662 -[gh3668]: https://github.com/tomchristie/django-rest-framework/issues/3668 -[gh3672]: https://github.com/tomchristie/django-rest-framework/issues/3672 -[gh3677]: https://github.com/tomchristie/django-rest-framework/issues/3677 -[gh3679]: https://github.com/tomchristie/django-rest-framework/issues/3679 -[gh3684]: https://github.com/tomchristie/django-rest-framework/issues/3684 -[gh3687]: https://github.com/tomchristie/django-rest-framework/issues/3687 -[gh3701]: https://github.com/tomchristie/django-rest-framework/issues/3701 -[gh3705]: https://github.com/tomchristie/django-rest-framework/issues/3705 -[gh3714]: https://github.com/tomchristie/django-rest-framework/issues/3714 -[gh3718]: https://github.com/tomchristie/django-rest-framework/issues/3718 -[gh3723]: https://github.com/tomchristie/django-rest-framework/issues/3723 +[gh3228]: https://github.com/encode/django-rest-framework/issues/3228 +[gh3252]: https://github.com/encode/django-rest-framework/issues/3252 +[gh3513]: https://github.com/encode/django-rest-framework/issues/3513 +[gh3534]: https://github.com/encode/django-rest-framework/issues/3534 +[gh3578]: https://github.com/encode/django-rest-framework/issues/3578 +[gh3596]: https://github.com/encode/django-rest-framework/issues/3596 +[gh3597]: https://github.com/encode/django-rest-framework/issues/3597 +[gh3600]: https://github.com/encode/django-rest-framework/issues/3600 +[gh3626]: https://github.com/encode/django-rest-framework/issues/3626 +[gh3628]: https://github.com/encode/django-rest-framework/issues/3628 +[gh3631]: https://github.com/encode/django-rest-framework/issues/3631 +[gh3634]: https://github.com/encode/django-rest-framework/issues/3634 +[gh3635]: https://github.com/encode/django-rest-framework/issues/3635 +[gh3654]: https://github.com/encode/django-rest-framework/issues/3654 +[gh3655]: https://github.com/encode/django-rest-framework/issues/3655 +[gh3656]: https://github.com/encode/django-rest-framework/issues/3656 +[gh3662]: https://github.com/encode/django-rest-framework/issues/3662 +[gh3668]: https://github.com/encode/django-rest-framework/issues/3668 +[gh3672]: https://github.com/encode/django-rest-framework/issues/3672 +[gh3677]: https://github.com/encode/django-rest-framework/issues/3677 +[gh3679]: https://github.com/encode/django-rest-framework/issues/3679 +[gh3684]: https://github.com/encode/django-rest-framework/issues/3684 +[gh3687]: https://github.com/encode/django-rest-framework/issues/3687 +[gh3701]: https://github.com/encode/django-rest-framework/issues/3701 +[gh3705]: https://github.com/encode/django-rest-framework/issues/3705 +[gh3714]: https://github.com/encode/django-rest-framework/issues/3714 +[gh3718]: https://github.com/encode/django-rest-framework/issues/3718 +[gh3723]: https://github.com/encode/django-rest-framework/issues/3723 -[gh3968]: https://github.com/tomchristie/django-rest-framework/issues/3968 -[gh3962]: https://github.com/tomchristie/django-rest-framework/issues/3962 -[gh3913]: https://github.com/tomchristie/django-rest-framework/issues/3913 -[gh3912]: https://github.com/tomchristie/django-rest-framework/issues/3912 -[gh3910]: https://github.com/tomchristie/django-rest-framework/issues/3910 -[gh3903]: https://github.com/tomchristie/django-rest-framework/issues/3903 -[gh3887]: https://github.com/tomchristie/django-rest-framework/issues/3887 -[gh3878]: https://github.com/tomchristie/django-rest-framework/issues/3878 -[gh3860]: https://github.com/tomchristie/django-rest-framework/issues/3860 -[gh3858]: https://github.com/tomchristie/django-rest-framework/issues/3858 -[gh3842]: https://github.com/tomchristie/django-rest-framework/issues/3842 -[gh3833]: https://github.com/tomchristie/django-rest-framework/issues/3833 -[gh3832]: https://github.com/tomchristie/django-rest-framework/issues/3832 -[gh3819]: https://github.com/tomchristie/django-rest-framework/issues/3819 -[gh3815]: https://github.com/tomchristie/django-rest-framework/issues/3815 -[gh3809]: https://github.com/tomchristie/django-rest-framework/issues/3809 -[gh3805]: https://github.com/tomchristie/django-rest-framework/issues/3805 -[gh3804]: https://github.com/tomchristie/django-rest-framework/issues/3804 -[gh3801]: https://github.com/tomchristie/django-rest-framework/issues/3801 -[gh3787]: https://github.com/tomchristie/django-rest-framework/issues/3787 -[gh3786]: https://github.com/tomchristie/django-rest-framework/issues/3786 -[gh3785]: https://github.com/tomchristie/django-rest-framework/issues/3785 -[gh3774]: https://github.com/tomchristie/django-rest-framework/issues/3774 -[gh3769]: https://github.com/tomchristie/django-rest-framework/issues/3769 -[gh3753]: https://github.com/tomchristie/django-rest-framework/issues/3753 -[gh3739]: https://github.com/tomchristie/django-rest-framework/issues/3739 -[gh3731]: https://github.com/tomchristie/django-rest-framework/issues/3731 -[gh3728]: https://github.com/tomchristie/django-rest-framework/issues/3726 -[gh3715]: https://github.com/tomchristie/django-rest-framework/issues/3715 -[gh3703]: https://github.com/tomchristie/django-rest-framework/issues/3703 -[gh3696]: https://github.com/tomchristie/django-rest-framework/issues/3696 -[gh3637]: https://github.com/tomchristie/django-rest-framework/issues/3637 -[gh3636]: https://github.com/tomchristie/django-rest-framework/issues/3636 -[gh3605]: https://github.com/tomchristie/django-rest-framework/issues/3605 -[gh3604]: https://github.com/tomchristie/django-rest-framework/issues/3604 +[gh3968]: https://github.com/encode/django-rest-framework/issues/3968 +[gh3962]: https://github.com/encode/django-rest-framework/issues/3962 +[gh3913]: https://github.com/encode/django-rest-framework/issues/3913 +[gh3912]: https://github.com/encode/django-rest-framework/issues/3912 +[gh3910]: https://github.com/encode/django-rest-framework/issues/3910 +[gh3903]: https://github.com/encode/django-rest-framework/issues/3903 +[gh3887]: https://github.com/encode/django-rest-framework/issues/3887 +[gh3878]: https://github.com/encode/django-rest-framework/issues/3878 +[gh3860]: https://github.com/encode/django-rest-framework/issues/3860 +[gh3858]: https://github.com/encode/django-rest-framework/issues/3858 +[gh3842]: https://github.com/encode/django-rest-framework/issues/3842 +[gh3833]: https://github.com/encode/django-rest-framework/issues/3833 +[gh3832]: https://github.com/encode/django-rest-framework/issues/3832 +[gh3819]: https://github.com/encode/django-rest-framework/issues/3819 +[gh3815]: https://github.com/encode/django-rest-framework/issues/3815 +[gh3809]: https://github.com/encode/django-rest-framework/issues/3809 +[gh3805]: https://github.com/encode/django-rest-framework/issues/3805 +[gh3804]: https://github.com/encode/django-rest-framework/issues/3804 +[gh3801]: https://github.com/encode/django-rest-framework/issues/3801 +[gh3787]: https://github.com/encode/django-rest-framework/issues/3787 +[gh3786]: https://github.com/encode/django-rest-framework/issues/3786 +[gh3785]: https://github.com/encode/django-rest-framework/issues/3785 +[gh3774]: https://github.com/encode/django-rest-framework/issues/3774 +[gh3769]: https://github.com/encode/django-rest-framework/issues/3769 +[gh3753]: https://github.com/encode/django-rest-framework/issues/3753 +[gh3739]: https://github.com/encode/django-rest-framework/issues/3739 +[gh3731]: https://github.com/encode/django-rest-framework/issues/3731 +[gh3728]: https://github.com/encode/django-rest-framework/issues/3726 +[gh3715]: https://github.com/encode/django-rest-framework/issues/3715 +[gh3703]: https://github.com/encode/django-rest-framework/issues/3703 +[gh3696]: https://github.com/encode/django-rest-framework/issues/3696 +[gh3637]: https://github.com/encode/django-rest-framework/issues/3637 +[gh3636]: https://github.com/encode/django-rest-framework/issues/3636 +[gh3605]: https://github.com/encode/django-rest-framework/issues/3605 +[gh3604]: https://github.com/encode/django-rest-framework/issues/3604 -[gh2403]: https://github.com/tomchristie/django-rest-framework/issues/2403 -[gh2848]: https://github.com/tomchristie/django-rest-framework/issues/2848 -[gh2996]: https://github.com/tomchristie/django-rest-framework/issues/2996 -[gh3164]: https://github.com/tomchristie/django-rest-framework/issues/3164 -[gh3273]: https://github.com/tomchristie/django-rest-framework/issues/3273 -[gh3381]: https://github.com/tomchristie/django-rest-framework/issues/3381 -[gh3438]: https://github.com/tomchristie/django-rest-framework/issues/3438 -[gh3444]: https://github.com/tomchristie/django-rest-framework/issues/3444 -[gh3476]: https://github.com/tomchristie/django-rest-framework/issues/3476 -[gh3487]: https://github.com/tomchristie/django-rest-framework/issues/3487 -[gh3541]: https://github.com/tomchristie/django-rest-framework/issues/3541 -[gh3710]: https://github.com/tomchristie/django-rest-framework/issues/3710 -[gh3729]: https://github.com/tomchristie/django-rest-framework/issues/3729 -[gh3751]: https://github.com/tomchristie/django-rest-framework/issues/3751 -[gh3812]: https://github.com/tomchristie/django-rest-framework/issues/3812 -[gh3816]: https://github.com/tomchristie/django-rest-framework/issues/3816 -[gh3820]: https://github.com/tomchristie/django-rest-framework/issues/3820 -[gh3906]: https://github.com/tomchristie/django-rest-framework/issues/3906 -[gh3908]: https://github.com/tomchristie/django-rest-framework/issues/3908 -[gh3926]: https://github.com/tomchristie/django-rest-framework/issues/3926 -[gh3933]: https://github.com/tomchristie/django-rest-framework/issues/3933 -[gh3936]: https://github.com/tomchristie/django-rest-framework/issues/3936 -[gh3938]: https://github.com/tomchristie/django-rest-framework/issues/3938 -[gh3943]: https://github.com/tomchristie/django-rest-framework/issues/3943 -[gh3953]: https://github.com/tomchristie/django-rest-framework/issues/3953 -[gh3964]: https://github.com/tomchristie/django-rest-framework/issues/3964 -[gh3968]: https://github.com/tomchristie/django-rest-framework/issues/3968 -[gh3970]: https://github.com/tomchristie/django-rest-framework/issues/3970 -[gh3971]: https://github.com/tomchristie/django-rest-framework/issues/3971 -[gh3976]: https://github.com/tomchristie/django-rest-framework/issues/3976 -[gh3983]: https://github.com/tomchristie/django-rest-framework/issues/3983 -[gh3990]: https://github.com/tomchristie/django-rest-framework/issues/3990 -[gh4002]: https://github.com/tomchristie/django-rest-framework/issues/4002 -[gh4003]: https://github.com/tomchristie/django-rest-framework/issues/4003 -[gh4005]: https://github.com/tomchristie/django-rest-framework/issues/4005 -[gh4006]: https://github.com/tomchristie/django-rest-framework/issues/4006 -[gh4008]: https://github.com/tomchristie/django-rest-framework/issues/4008 -[gh4021]: https://github.com/tomchristie/django-rest-framework/issues/4021 -[gh4025]: https://github.com/tomchristie/django-rest-framework/issues/4025 -[gh4040]: https://github.com/tomchristie/django-rest-framework/issues/4040 -[gh4041]: https://github.com/tomchristie/django-rest-framework/issues/4041 -[gh4049]: https://github.com/tomchristie/django-rest-framework/issues/4049 -[gh4075]: https://github.com/tomchristie/django-rest-framework/issues/4075 -[gh4079]: https://github.com/tomchristie/django-rest-framework/issues/4079 -[gh4090]: https://github.com/tomchristie/django-rest-framework/issues/4090 -[gh4097]: https://github.com/tomchristie/django-rest-framework/issues/4097 -[gh4098]: https://github.com/tomchristie/django-rest-framework/issues/4098 -[gh4103]: https://github.com/tomchristie/django-rest-framework/issues/4103 -[gh4105]: https://github.com/tomchristie/django-rest-framework/issues/4105 -[gh4106]: https://github.com/tomchristie/django-rest-framework/issues/4106 -[gh4107]: https://github.com/tomchristie/django-rest-framework/issues/4107 -[gh4118]: https://github.com/tomchristie/django-rest-framework/issues/4118 -[gh4146]: https://github.com/tomchristie/django-rest-framework/issues/4146 -[gh4149]: https://github.com/tomchristie/django-rest-framework/issues/4149 -[gh4153]: https://github.com/tomchristie/django-rest-framework/issues/4153 -[gh4156]: https://github.com/tomchristie/django-rest-framework/issues/4156 -[gh4157]: https://github.com/tomchristie/django-rest-framework/issues/4157 -[gh4158]: https://github.com/tomchristie/django-rest-framework/issues/4158 -[gh4166]: https://github.com/tomchristie/django-rest-framework/issues/4166 -[gh4176]: https://github.com/tomchristie/django-rest-framework/issues/4176 -[gh4179]: https://github.com/tomchristie/django-rest-framework/issues/4179 -[gh4180]: https://github.com/tomchristie/django-rest-framework/issues/4180 -[gh4181]: https://github.com/tomchristie/django-rest-framework/issues/4181 -[gh4185]: https://github.com/tomchristie/django-rest-framework/issues/4185 -[gh4187]: https://github.com/tomchristie/django-rest-framework/issues/4187 -[gh4191]: https://github.com/tomchristie/django-rest-framework/issues/4191 -[gh4192]: https://github.com/tomchristie/django-rest-framework/issues/4192 -[gh4194]: https://github.com/tomchristie/django-rest-framework/issues/4194 -[gh4195]: https://github.com/tomchristie/django-rest-framework/issues/4195 -[gh4196]: https://github.com/tomchristie/django-rest-framework/issues/4196 -[gh4212]: https://github.com/tomchristie/django-rest-framework/issues/4212 -[gh4215]: https://github.com/tomchristie/django-rest-framework/issues/4215 -[gh4217]: https://github.com/tomchristie/django-rest-framework/issues/4217 -[gh4219]: https://github.com/tomchristie/django-rest-framework/issues/4219 -[gh4229]: https://github.com/tomchristie/django-rest-framework/issues/4229 -[gh4233]: https://github.com/tomchristie/django-rest-framework/issues/4233 -[gh4244]: https://github.com/tomchristie/django-rest-framework/issues/4244 -[gh4246]: https://github.com/tomchristie/django-rest-framework/issues/4246 -[gh4253]: https://github.com/tomchristie/django-rest-framework/issues/4253 -[gh4254]: https://github.com/tomchristie/django-rest-framework/issues/4254 -[gh4255]: https://github.com/tomchristie/django-rest-framework/issues/4255 -[gh4256]: https://github.com/tomchristie/django-rest-framework/issues/4256 -[gh4259]: https://github.com/tomchristie/django-rest-framework/issues/4259 +[gh2403]: https://github.com/encode/django-rest-framework/issues/2403 +[gh2848]: https://github.com/encode/django-rest-framework/issues/2848 +[gh2996]: https://github.com/encode/django-rest-framework/issues/2996 +[gh3164]: https://github.com/encode/django-rest-framework/issues/3164 +[gh3273]: https://github.com/encode/django-rest-framework/issues/3273 +[gh3381]: https://github.com/encode/django-rest-framework/issues/3381 +[gh3438]: https://github.com/encode/django-rest-framework/issues/3438 +[gh3444]: https://github.com/encode/django-rest-framework/issues/3444 +[gh3476]: https://github.com/encode/django-rest-framework/issues/3476 +[gh3487]: https://github.com/encode/django-rest-framework/issues/3487 +[gh3541]: https://github.com/encode/django-rest-framework/issues/3541 +[gh3710]: https://github.com/encode/django-rest-framework/issues/3710 +[gh3729]: https://github.com/encode/django-rest-framework/issues/3729 +[gh3751]: https://github.com/encode/django-rest-framework/issues/3751 +[gh3812]: https://github.com/encode/django-rest-framework/issues/3812 +[gh3816]: https://github.com/encode/django-rest-framework/issues/3816 +[gh3820]: https://github.com/encode/django-rest-framework/issues/3820 +[gh3906]: https://github.com/encode/django-rest-framework/issues/3906 +[gh3908]: https://github.com/encode/django-rest-framework/issues/3908 +[gh3926]: https://github.com/encode/django-rest-framework/issues/3926 +[gh3933]: https://github.com/encode/django-rest-framework/issues/3933 +[gh3936]: https://github.com/encode/django-rest-framework/issues/3936 +[gh3938]: https://github.com/encode/django-rest-framework/issues/3938 +[gh3943]: https://github.com/encode/django-rest-framework/issues/3943 +[gh3953]: https://github.com/encode/django-rest-framework/issues/3953 +[gh3964]: https://github.com/encode/django-rest-framework/issues/3964 +[gh3968]: https://github.com/encode/django-rest-framework/issues/3968 +[gh3970]: https://github.com/encode/django-rest-framework/issues/3970 +[gh3971]: https://github.com/encode/django-rest-framework/issues/3971 +[gh3976]: https://github.com/encode/django-rest-framework/issues/3976 +[gh3983]: https://github.com/encode/django-rest-framework/issues/3983 +[gh3990]: https://github.com/encode/django-rest-framework/issues/3990 +[gh4002]: https://github.com/encode/django-rest-framework/issues/4002 +[gh4003]: https://github.com/encode/django-rest-framework/issues/4003 +[gh4005]: https://github.com/encode/django-rest-framework/issues/4005 +[gh4006]: https://github.com/encode/django-rest-framework/issues/4006 +[gh4008]: https://github.com/encode/django-rest-framework/issues/4008 +[gh4021]: https://github.com/encode/django-rest-framework/issues/4021 +[gh4025]: https://github.com/encode/django-rest-framework/issues/4025 +[gh4040]: https://github.com/encode/django-rest-framework/issues/4040 +[gh4041]: https://github.com/encode/django-rest-framework/issues/4041 +[gh4049]: https://github.com/encode/django-rest-framework/issues/4049 +[gh4075]: https://github.com/encode/django-rest-framework/issues/4075 +[gh4079]: https://github.com/encode/django-rest-framework/issues/4079 +[gh4090]: https://github.com/encode/django-rest-framework/issues/4090 +[gh4097]: https://github.com/encode/django-rest-framework/issues/4097 +[gh4098]: https://github.com/encode/django-rest-framework/issues/4098 +[gh4103]: https://github.com/encode/django-rest-framework/issues/4103 +[gh4105]: https://github.com/encode/django-rest-framework/issues/4105 +[gh4106]: https://github.com/encode/django-rest-framework/issues/4106 +[gh4107]: https://github.com/encode/django-rest-framework/issues/4107 +[gh4118]: https://github.com/encode/django-rest-framework/issues/4118 +[gh4146]: https://github.com/encode/django-rest-framework/issues/4146 +[gh4149]: https://github.com/encode/django-rest-framework/issues/4149 +[gh4153]: https://github.com/encode/django-rest-framework/issues/4153 +[gh4156]: https://github.com/encode/django-rest-framework/issues/4156 +[gh4157]: https://github.com/encode/django-rest-framework/issues/4157 +[gh4158]: https://github.com/encode/django-rest-framework/issues/4158 +[gh4166]: https://github.com/encode/django-rest-framework/issues/4166 +[gh4176]: https://github.com/encode/django-rest-framework/issues/4176 +[gh4179]: https://github.com/encode/django-rest-framework/issues/4179 +[gh4180]: https://github.com/encode/django-rest-framework/issues/4180 +[gh4181]: https://github.com/encode/django-rest-framework/issues/4181 +[gh4185]: https://github.com/encode/django-rest-framework/issues/4185 +[gh4187]: https://github.com/encode/django-rest-framework/issues/4187 +[gh4191]: https://github.com/encode/django-rest-framework/issues/4191 +[gh4192]: https://github.com/encode/django-rest-framework/issues/4192 +[gh4194]: https://github.com/encode/django-rest-framework/issues/4194 +[gh4195]: https://github.com/encode/django-rest-framework/issues/4195 +[gh4196]: https://github.com/encode/django-rest-framework/issues/4196 +[gh4212]: https://github.com/encode/django-rest-framework/issues/4212 +[gh4215]: https://github.com/encode/django-rest-framework/issues/4215 +[gh4217]: https://github.com/encode/django-rest-framework/issues/4217 +[gh4219]: https://github.com/encode/django-rest-framework/issues/4219 +[gh4229]: https://github.com/encode/django-rest-framework/issues/4229 +[gh4233]: https://github.com/encode/django-rest-framework/issues/4233 +[gh4244]: https://github.com/encode/django-rest-framework/issues/4244 +[gh4246]: https://github.com/encode/django-rest-framework/issues/4246 +[gh4253]: https://github.com/encode/django-rest-framework/issues/4253 +[gh4254]: https://github.com/encode/django-rest-framework/issues/4254 +[gh4255]: https://github.com/encode/django-rest-framework/issues/4255 +[gh4256]: https://github.com/encode/django-rest-framework/issues/4256 +[gh4259]: https://github.com/encode/django-rest-framework/issues/4259 -[gh4323]: https://github.com/tomchristie/django-rest-framework/issues/4323 -[gh4268]: https://github.com/tomchristie/django-rest-framework/issues/4268 -[gh4321]: https://github.com/tomchristie/django-rest-framework/issues/4321 -[gh4308]: https://github.com/tomchristie/django-rest-framework/issues/4308 -[gh4305]: https://github.com/tomchristie/django-rest-framework/issues/4305 -[gh4316]: https://github.com/tomchristie/django-rest-framework/issues/4316 -[gh4294]: https://github.com/tomchristie/django-rest-framework/issues/4294 -[gh4293]: https://github.com/tomchristie/django-rest-framework/issues/4293 -[gh4315]: https://github.com/tomchristie/django-rest-framework/issues/4315 -[gh4314]: https://github.com/tomchristie/django-rest-framework/issues/4314 -[gh4289]: https://github.com/tomchristie/django-rest-framework/issues/4289 -[gh4265]: https://github.com/tomchristie/django-rest-framework/issues/4265 -[gh4285]: https://github.com/tomchristie/django-rest-framework/issues/4285 -[gh4287]: https://github.com/tomchristie/django-rest-framework/issues/4287 -[gh4313]: https://github.com/tomchristie/django-rest-framework/issues/4313 -[gh4281]: https://github.com/tomchristie/django-rest-framework/issues/4281 -[gh4299]: https://github.com/tomchristie/django-rest-framework/issues/4299 -[gh4307]: https://github.com/tomchristie/django-rest-framework/issues/4307 -[gh4302]: https://github.com/tomchristie/django-rest-framework/issues/4302 -[gh4303]: https://github.com/tomchristie/django-rest-framework/issues/4303 -[gh4298]: https://github.com/tomchristie/django-rest-framework/issues/4298 -[gh4291]: https://github.com/tomchristie/django-rest-framework/issues/4291 -[gh4270]: https://github.com/tomchristie/django-rest-framework/issues/4270 -[gh4272]: https://github.com/tomchristie/django-rest-framework/issues/4272 -[gh4273]: https://github.com/tomchristie/django-rest-framework/issues/4273 -[gh4288]: https://github.com/tomchristie/django-rest-framework/issues/4288 +[gh4323]: https://github.com/encode/django-rest-framework/issues/4323 +[gh4268]: https://github.com/encode/django-rest-framework/issues/4268 +[gh4321]: https://github.com/encode/django-rest-framework/issues/4321 +[gh4308]: https://github.com/encode/django-rest-framework/issues/4308 +[gh4305]: https://github.com/encode/django-rest-framework/issues/4305 +[gh4316]: https://github.com/encode/django-rest-framework/issues/4316 +[gh4294]: https://github.com/encode/django-rest-framework/issues/4294 +[gh4293]: https://github.com/encode/django-rest-framework/issues/4293 +[gh4315]: https://github.com/encode/django-rest-framework/issues/4315 +[gh4314]: https://github.com/encode/django-rest-framework/issues/4314 +[gh4289]: https://github.com/encode/django-rest-framework/issues/4289 +[gh4265]: https://github.com/encode/django-rest-framework/issues/4265 +[gh4285]: https://github.com/encode/django-rest-framework/issues/4285 +[gh4287]: https://github.com/encode/django-rest-framework/issues/4287 +[gh4313]: https://github.com/encode/django-rest-framework/issues/4313 +[gh4281]: https://github.com/encode/django-rest-framework/issues/4281 +[gh4299]: https://github.com/encode/django-rest-framework/issues/4299 +[gh4307]: https://github.com/encode/django-rest-framework/issues/4307 +[gh4302]: https://github.com/encode/django-rest-framework/issues/4302 +[gh4303]: https://github.com/encode/django-rest-framework/issues/4303 +[gh4298]: https://github.com/encode/django-rest-framework/issues/4298 +[gh4291]: https://github.com/encode/django-rest-framework/issues/4291 +[gh4270]: https://github.com/encode/django-rest-framework/issues/4270 +[gh4272]: https://github.com/encode/django-rest-framework/issues/4272 +[gh4273]: https://github.com/encode/django-rest-framework/issues/4273 +[gh4288]: https://github.com/encode/django-rest-framework/issues/4288 -[gh3565]: https://github.com/tomchristie/django-rest-framework/issues/3565 -[gh3610]: https://github.com/tomchristie/django-rest-framework/issues/3610 -[gh4198]: https://github.com/tomchristie/django-rest-framework/issues/4198 -[gh4199]: https://github.com/tomchristie/django-rest-framework/issues/4199 -[gh4236]: https://github.com/tomchristie/django-rest-framework/issues/4236 -[gh4292]: https://github.com/tomchristie/django-rest-framework/issues/4292 -[gh4296]: https://github.com/tomchristie/django-rest-framework/issues/4296 -[gh4318]: https://github.com/tomchristie/django-rest-framework/issues/4318 -[gh4330]: https://github.com/tomchristie/django-rest-framework/issues/4330 -[gh4331]: https://github.com/tomchristie/django-rest-framework/issues/4331 -[gh4332]: https://github.com/tomchristie/django-rest-framework/issues/4332 -[gh4335]: https://github.com/tomchristie/django-rest-framework/issues/4335 -[gh4336]: https://github.com/tomchristie/django-rest-framework/issues/4336 -[gh4338]: https://github.com/tomchristie/django-rest-framework/issues/4338 -[gh4339]: https://github.com/tomchristie/django-rest-framework/issues/4339 -[gh4340]: https://github.com/tomchristie/django-rest-framework/issues/4340 -[gh4344]: https://github.com/tomchristie/django-rest-framework/issues/4344 -[gh4345]: https://github.com/tomchristie/django-rest-framework/issues/4345 -[gh4346]: https://github.com/tomchristie/django-rest-framework/issues/4346 -[gh4347]: https://github.com/tomchristie/django-rest-framework/issues/4347 -[gh4348]: https://github.com/tomchristie/django-rest-framework/issues/4348 -[gh4349]: https://github.com/tomchristie/django-rest-framework/issues/4349 -[gh4354]: https://github.com/tomchristie/django-rest-framework/issues/4354 -[gh4357]: https://github.com/tomchristie/django-rest-framework/issues/4357 -[gh4358]: https://github.com/tomchristie/django-rest-framework/issues/4358 -[gh4359]: https://github.com/tomchristie/django-rest-framework/issues/4359 +[gh3565]: https://github.com/encode/django-rest-framework/issues/3565 +[gh3610]: https://github.com/encode/django-rest-framework/issues/3610 +[gh4198]: https://github.com/encode/django-rest-framework/issues/4198 +[gh4199]: https://github.com/encode/django-rest-framework/issues/4199 +[gh4236]: https://github.com/encode/django-rest-framework/issues/4236 +[gh4292]: https://github.com/encode/django-rest-framework/issues/4292 +[gh4296]: https://github.com/encode/django-rest-framework/issues/4296 +[gh4318]: https://github.com/encode/django-rest-framework/issues/4318 +[gh4330]: https://github.com/encode/django-rest-framework/issues/4330 +[gh4331]: https://github.com/encode/django-rest-framework/issues/4331 +[gh4332]: https://github.com/encode/django-rest-framework/issues/4332 +[gh4335]: https://github.com/encode/django-rest-framework/issues/4335 +[gh4336]: https://github.com/encode/django-rest-framework/issues/4336 +[gh4338]: https://github.com/encode/django-rest-framework/issues/4338 +[gh4339]: https://github.com/encode/django-rest-framework/issues/4339 +[gh4340]: https://github.com/encode/django-rest-framework/issues/4340 +[gh4344]: https://github.com/encode/django-rest-framework/issues/4344 +[gh4345]: https://github.com/encode/django-rest-framework/issues/4345 +[gh4346]: https://github.com/encode/django-rest-framework/issues/4346 +[gh4347]: https://github.com/encode/django-rest-framework/issues/4347 +[gh4348]: https://github.com/encode/django-rest-framework/issues/4348 +[gh4349]: https://github.com/encode/django-rest-framework/issues/4349 +[gh4354]: https://github.com/encode/django-rest-framework/issues/4354 +[gh4357]: https://github.com/encode/django-rest-framework/issues/4357 +[gh4358]: https://github.com/encode/django-rest-framework/issues/4358 +[gh4359]: https://github.com/encode/django-rest-framework/issues/4359 -[gh4361]: https://github.com/tomchristie/django-rest-framework/issues/4361 +[gh4361]: https://github.com/encode/django-rest-framework/issues/4361 -[gh2829]: https://github.com/tomchristie/django-rest-framework/issues/2829 -[gh3329]: https://github.com/tomchristie/django-rest-framework/issues/3329 -[gh3330]: https://github.com/tomchristie/django-rest-framework/issues/3330 -[gh3365]: https://github.com/tomchristie/django-rest-framework/issues/3365 -[gh3394]: https://github.com/tomchristie/django-rest-framework/issues/3394 -[gh3868]: https://github.com/tomchristie/django-rest-framework/issues/3868 -[gh3868]: https://github.com/tomchristie/django-rest-framework/issues/3868 -[gh3877]: https://github.com/tomchristie/django-rest-framework/issues/3877 -[gh4042]: https://github.com/tomchristie/django-rest-framework/issues/4042 -[gh4111]: https://github.com/tomchristie/django-rest-framework/issues/4111 -[gh4119]: https://github.com/tomchristie/django-rest-framework/issues/4119 -[gh4120]: https://github.com/tomchristie/django-rest-framework/issues/4120 -[gh4121]: https://github.com/tomchristie/django-rest-framework/issues/4121 -[gh4122]: https://github.com/tomchristie/django-rest-framework/issues/4122 -[gh4137]: https://github.com/tomchristie/django-rest-framework/issues/4137 -[gh4172]: https://github.com/tomchristie/django-rest-framework/issues/4172 -[gh4201]: https://github.com/tomchristie/django-rest-framework/issues/4201 -[gh4260]: https://github.com/tomchristie/django-rest-framework/issues/4260 -[gh4278]: https://github.com/tomchristie/django-rest-framework/issues/4278 -[gh4279]: https://github.com/tomchristie/django-rest-framework/issues/4279 -[gh4329]: https://github.com/tomchristie/django-rest-framework/issues/4329 -[gh4370]: https://github.com/tomchristie/django-rest-framework/issues/4370 -[gh4371]: https://github.com/tomchristie/django-rest-framework/issues/4371 -[gh4372]: https://github.com/tomchristie/django-rest-framework/issues/4372 -[gh4373]: https://github.com/tomchristie/django-rest-framework/issues/4373 -[gh4374]: https://github.com/tomchristie/django-rest-framework/issues/4374 -[gh4375]: https://github.com/tomchristie/django-rest-framework/issues/4375 -[gh4376]: https://github.com/tomchristie/django-rest-framework/issues/4376 -[gh4377]: https://github.com/tomchristie/django-rest-framework/issues/4377 -[gh4378]: https://github.com/tomchristie/django-rest-framework/issues/4378 -[gh4379]: https://github.com/tomchristie/django-rest-framework/issues/4379 -[gh4380]: https://github.com/tomchristie/django-rest-framework/issues/4380 -[gh4382]: https://github.com/tomchristie/django-rest-framework/issues/4382 -[gh4383]: https://github.com/tomchristie/django-rest-framework/issues/4383 -[gh4386]: https://github.com/tomchristie/django-rest-framework/issues/4386 -[gh4387]: https://github.com/tomchristie/django-rest-framework/issues/4387 -[gh4388]: https://github.com/tomchristie/django-rest-framework/issues/4388 -[gh4390]: https://github.com/tomchristie/django-rest-framework/issues/4390 -[gh4391]: https://github.com/tomchristie/django-rest-framework/issues/4391 -[gh4392]: https://github.com/tomchristie/django-rest-framework/issues/4392 -[gh4393]: https://github.com/tomchristie/django-rest-framework/issues/4393 -[gh4394]: https://github.com/tomchristie/django-rest-framework/issues/4394 +[gh2829]: https://github.com/encode/django-rest-framework/issues/2829 +[gh3329]: https://github.com/encode/django-rest-framework/issues/3329 +[gh3330]: https://github.com/encode/django-rest-framework/issues/3330 +[gh3365]: https://github.com/encode/django-rest-framework/issues/3365 +[gh3394]: https://github.com/encode/django-rest-framework/issues/3394 +[gh3868]: https://github.com/encode/django-rest-framework/issues/3868 +[gh3868]: https://github.com/encode/django-rest-framework/issues/3868 +[gh3877]: https://github.com/encode/django-rest-framework/issues/3877 +[gh4042]: https://github.com/encode/django-rest-framework/issues/4042 +[gh4111]: https://github.com/encode/django-rest-framework/issues/4111 +[gh4119]: https://github.com/encode/django-rest-framework/issues/4119 +[gh4120]: https://github.com/encode/django-rest-framework/issues/4120 +[gh4121]: https://github.com/encode/django-rest-framework/issues/4121 +[gh4122]: https://github.com/encode/django-rest-framework/issues/4122 +[gh4137]: https://github.com/encode/django-rest-framework/issues/4137 +[gh4172]: https://github.com/encode/django-rest-framework/issues/4172 +[gh4201]: https://github.com/encode/django-rest-framework/issues/4201 +[gh4260]: https://github.com/encode/django-rest-framework/issues/4260 +[gh4278]: https://github.com/encode/django-rest-framework/issues/4278 +[gh4279]: https://github.com/encode/django-rest-framework/issues/4279 +[gh4329]: https://github.com/encode/django-rest-framework/issues/4329 +[gh4370]: https://github.com/encode/django-rest-framework/issues/4370 +[gh4371]: https://github.com/encode/django-rest-framework/issues/4371 +[gh4372]: https://github.com/encode/django-rest-framework/issues/4372 +[gh4373]: https://github.com/encode/django-rest-framework/issues/4373 +[gh4374]: https://github.com/encode/django-rest-framework/issues/4374 +[gh4375]: https://github.com/encode/django-rest-framework/issues/4375 +[gh4376]: https://github.com/encode/django-rest-framework/issues/4376 +[gh4377]: https://github.com/encode/django-rest-framework/issues/4377 +[gh4378]: https://github.com/encode/django-rest-framework/issues/4378 +[gh4379]: https://github.com/encode/django-rest-framework/issues/4379 +[gh4380]: https://github.com/encode/django-rest-framework/issues/4380 +[gh4382]: https://github.com/encode/django-rest-framework/issues/4382 +[gh4383]: https://github.com/encode/django-rest-framework/issues/4383 +[gh4386]: https://github.com/encode/django-rest-framework/issues/4386 +[gh4387]: https://github.com/encode/django-rest-framework/issues/4387 +[gh4388]: https://github.com/encode/django-rest-framework/issues/4388 +[gh4390]: https://github.com/encode/django-rest-framework/issues/4390 +[gh4391]: https://github.com/encode/django-rest-framework/issues/4391 +[gh4392]: https://github.com/encode/django-rest-framework/issues/4392 +[gh4393]: https://github.com/encode/django-rest-framework/issues/4393 +[gh4394]: https://github.com/encode/django-rest-framework/issues/4394 -[gh4416]: https://github.com/tomchristie/django-rest-framework/issues/4416 -[gh4409]: https://github.com/tomchristie/django-rest-framework/issues/4409 -[gh4415]: https://github.com/tomchristie/django-rest-framework/issues/4415 -[gh4410]: https://github.com/tomchristie/django-rest-framework/issues/4410 -[gh4408]: https://github.com/tomchristie/django-rest-framework/issues/4408 -[gh4398]: https://github.com/tomchristie/django-rest-framework/issues/4398 -[gh4407]: https://github.com/tomchristie/django-rest-framework/issues/4407 -[gh4403]: https://github.com/tomchristie/django-rest-framework/issues/4403 -[gh4404]: https://github.com/tomchristie/django-rest-framework/issues/4404 -[gh4412]: https://github.com/tomchristie/django-rest-framework/issues/4412 +[gh4416]: https://github.com/encode/django-rest-framework/issues/4416 +[gh4409]: https://github.com/encode/django-rest-framework/issues/4409 +[gh4415]: https://github.com/encode/django-rest-framework/issues/4415 +[gh4410]: https://github.com/encode/django-rest-framework/issues/4410 +[gh4408]: https://github.com/encode/django-rest-framework/issues/4408 +[gh4398]: https://github.com/encode/django-rest-framework/issues/4398 +[gh4407]: https://github.com/encode/django-rest-framework/issues/4407 +[gh4403]: https://github.com/encode/django-rest-framework/issues/4403 +[gh4404]: https://github.com/encode/django-rest-framework/issues/4404 +[gh4412]: https://github.com/encode/django-rest-framework/issues/4412 -[gh4435]: https://github.com/tomchristie/django-rest-framework/issues/4435 -[gh4425]: https://github.com/tomchristie/django-rest-framework/issues/4425 -[gh4429]: https://github.com/tomchristie/django-rest-framework/issues/4429 -[gh3508]: https://github.com/tomchristie/django-rest-framework/issues/3508 -[gh4419]: https://github.com/tomchristie/django-rest-framework/issues/4419 -[gh4423]: https://github.com/tomchristie/django-rest-framework/issues/4423 +[gh4435]: https://github.com/encode/django-rest-framework/issues/4435 +[gh4425]: https://github.com/encode/django-rest-framework/issues/4425 +[gh4429]: https://github.com/encode/django-rest-framework/issues/4429 +[gh3508]: https://github.com/encode/django-rest-framework/issues/3508 +[gh4419]: https://github.com/encode/django-rest-framework/issues/4419 +[gh4423]: https://github.com/encode/django-rest-framework/issues/4423 -[gh3951]: https://github.com/tomchristie/django-rest-framework/issues/3951 -[gh4500]: https://github.com/tomchristie/django-rest-framework/issues/4500 -[gh4489]: https://github.com/tomchristie/django-rest-framework/issues/4489 -[gh4490]: https://github.com/tomchristie/django-rest-framework/issues/4490 -[gh2617]: https://github.com/tomchristie/django-rest-framework/issues/2617 -[gh4472]: https://github.com/tomchristie/django-rest-framework/issues/4472 -[gh4473]: https://github.com/tomchristie/django-rest-framework/issues/4473 -[gh4495]: https://github.com/tomchristie/django-rest-framework/issues/4495 -[gh4493]: https://github.com/tomchristie/django-rest-framework/issues/4493 -[gh4465]: https://github.com/tomchristie/django-rest-framework/issues/4465 -[gh4462]: https://github.com/tomchristie/django-rest-framework/issues/4462 -[gh4458]: https://github.com/tomchristie/django-rest-framework/issues/4458 +[gh3951]: https://github.com/encode/django-rest-framework/issues/3951 +[gh4500]: https://github.com/encode/django-rest-framework/issues/4500 +[gh4489]: https://github.com/encode/django-rest-framework/issues/4489 +[gh4490]: https://github.com/encode/django-rest-framework/issues/4490 +[gh2617]: https://github.com/encode/django-rest-framework/issues/2617 +[gh4472]: https://github.com/encode/django-rest-framework/issues/4472 +[gh4473]: https://github.com/encode/django-rest-framework/issues/4473 +[gh4495]: https://github.com/encode/django-rest-framework/issues/4495 +[gh4493]: https://github.com/encode/django-rest-framework/issues/4493 +[gh4465]: https://github.com/encode/django-rest-framework/issues/4465 +[gh4462]: https://github.com/encode/django-rest-framework/issues/4462 +[gh4458]: https://github.com/encode/django-rest-framework/issues/4458 -[gh4612]: https://github.com/tomchristie/django-rest-framework/issues/4612 -[gh4608]: https://github.com/tomchristie/django-rest-framework/issues/4608 -[gh4601]: https://github.com/tomchristie/django-rest-framework/issues/4601 -[gh4611]: https://github.com/tomchristie/django-rest-framework/issues/4611 -[gh4605]: https://github.com/tomchristie/django-rest-framework/issues/4605 -[gh4609]: https://github.com/tomchristie/django-rest-framework/issues/4609 -[gh4606]: https://github.com/tomchristie/django-rest-framework/issues/4606 -[gh4600]: https://github.com/tomchristie/django-rest-framework/issues/4600 +[gh4612]: https://github.com/encode/django-rest-framework/issues/4612 +[gh4608]: https://github.com/encode/django-rest-framework/issues/4608 +[gh4601]: https://github.com/encode/django-rest-framework/issues/4601 +[gh4611]: https://github.com/encode/django-rest-framework/issues/4611 +[gh4605]: https://github.com/encode/django-rest-framework/issues/4605 +[gh4609]: https://github.com/encode/django-rest-framework/issues/4609 +[gh4606]: https://github.com/encode/django-rest-framework/issues/4606 +[gh4600]: https://github.com/encode/django-rest-framework/issues/4600 -[gh4631]: https://github.com/tomchristie/django-rest-framework/issues/4631 -[gh4638]: https://github.com/tomchristie/django-rest-framework/issues/4638 -[gh4532]: https://github.com/tomchristie/django-rest-framework/issues/4532 -[gh4636]: https://github.com/tomchristie/django-rest-framework/issues/4636 -[gh4622]: https://github.com/tomchristie/django-rest-framework/issues/4622 -[gh4602]: https://github.com/tomchristie/django-rest-framework/issues/4602 -[gh4640]: https://github.com/tomchristie/django-rest-framework/issues/4640 -[gh4624]: https://github.com/tomchristie/django-rest-framework/issues/4624 -[gh4569]: https://github.com/tomchristie/django-rest-framework/issues/4569 -[gh4627]: https://github.com/tomchristie/django-rest-framework/issues/4627 -[gh4620]: https://github.com/tomchristie/django-rest-framework/issues/4620 -[gh4628]: https://github.com/tomchristie/django-rest-framework/issues/4628 -[gh4639]: https://github.com/tomchristie/django-rest-framework/issues/4639 +[gh4631]: https://github.com/encode/django-rest-framework/issues/4631 +[gh4638]: https://github.com/encode/django-rest-framework/issues/4638 +[gh4532]: https://github.com/encode/django-rest-framework/issues/4532 +[gh4636]: https://github.com/encode/django-rest-framework/issues/4636 +[gh4622]: https://github.com/encode/django-rest-framework/issues/4622 +[gh4602]: https://github.com/encode/django-rest-framework/issues/4602 +[gh4640]: https://github.com/encode/django-rest-framework/issues/4640 +[gh4624]: https://github.com/encode/django-rest-framework/issues/4624 +[gh4569]: https://github.com/encode/django-rest-framework/issues/4569 +[gh4627]: https://github.com/encode/django-rest-framework/issues/4627 +[gh4620]: https://github.com/encode/django-rest-framework/issues/4620 +[gh4628]: https://github.com/encode/django-rest-framework/issues/4628 +[gh4639]: https://github.com/encode/django-rest-framework/issues/4639 -[gh4660]: https://github.com/tomchristie/django-rest-framework/issues/4660 -[gh4643]: https://github.com/tomchristie/django-rest-framework/issues/4643 -[gh4644]: https://github.com/tomchristie/django-rest-framework/issues/4644 -[gh4645]: https://github.com/tomchristie/django-rest-framework/issues/4645 -[gh4646]: https://github.com/tomchristie/django-rest-framework/issues/4646 -[gh4650]: https://github.com/tomchristie/django-rest-framework/issues/4650 +[gh4660]: https://github.com/encode/django-rest-framework/issues/4660 +[gh4643]: https://github.com/encode/django-rest-framework/issues/4643 +[gh4644]: https://github.com/encode/django-rest-framework/issues/4644 +[gh4645]: https://github.com/encode/django-rest-framework/issues/4645 +[gh4646]: https://github.com/encode/django-rest-framework/issues/4646 +[gh4650]: https://github.com/encode/django-rest-framework/issues/4650 -[gh4877]: https://github.com/tomchristie/django-rest-framework/issues/4877 -[gh4753]: https://github.com/tomchristie/django-rest-framework/issues/4753 -[gh4764]: https://github.com/tomchristie/django-rest-framework/issues/4764 -[gh4821]: https://github.com/tomchristie/django-rest-framework/issues/4821 -[gh4841]: https://github.com/tomchristie/django-rest-framework/issues/4841 -[gh4759]: https://github.com/tomchristie/django-rest-framework/issues/4759 -[gh4869]: https://github.com/tomchristie/django-rest-framework/issues/4869 -[gh4870]: https://github.com/tomchristie/django-rest-framework/issues/4870 -[gh4790]: https://github.com/tomchristie/django-rest-framework/issues/4790 -[gh4661]: https://github.com/tomchristie/django-rest-framework/issues/4661 -[gh4668]: https://github.com/tomchristie/django-rest-framework/issues/4668 -[gh4750]: https://github.com/tomchristie/django-rest-framework/issues/4750 -[gh4678]: https://github.com/tomchristie/django-rest-framework/issues/4678 -[gh4634]: https://github.com/tomchristie/django-rest-framework/issues/4634 -[gh4669]: https://github.com/tomchristie/django-rest-framework/issues/4669 -[gh4712]: https://github.com/tomchristie/django-rest-framework/issues/4712 +[gh4877]: https://github.com/encode/django-rest-framework/issues/4877 +[gh4753]: https://github.com/encode/django-rest-framework/issues/4753 +[gh4764]: https://github.com/encode/django-rest-framework/issues/4764 +[gh4821]: https://github.com/encode/django-rest-framework/issues/4821 +[gh4841]: https://github.com/encode/django-rest-framework/issues/4841 +[gh4759]: https://github.com/encode/django-rest-framework/issues/4759 +[gh4869]: https://github.com/encode/django-rest-framework/issues/4869 +[gh4870]: https://github.com/encode/django-rest-framework/issues/4870 +[gh4790]: https://github.com/encode/django-rest-framework/issues/4790 +[gh4661]: https://github.com/encode/django-rest-framework/issues/4661 +[gh4668]: https://github.com/encode/django-rest-framework/issues/4668 +[gh4750]: https://github.com/encode/django-rest-framework/issues/4750 +[gh4678]: https://github.com/encode/django-rest-framework/issues/4678 +[gh4634]: https://github.com/encode/django-rest-framework/issues/4634 +[gh4669]: https://github.com/encode/django-rest-framework/issues/4669 +[gh4712]: https://github.com/encode/django-rest-framework/issues/4712 -[gh4947]: https://github.com/tomchristie/django-rest-framework/issues/4947 +[gh4947]: https://github.com/encode/django-rest-framework/issues/4947 -[gh4959]: https://github.com/tomchristie/django-rest-framework/issues/4959 -[gh4961]: https://github.com/tomchristie/django-rest-framework/issues/4961 -[gh4952]: https://github.com/tomchristie/django-rest-framework/issues/4952 -[gh4953]: https://github.com/tomchristie/django-rest-framework/issues/4953 -[gh4950]: https://github.com/tomchristie/django-rest-framework/issues/4950 -[gh4951]: https://github.com/tomchristie/django-rest-framework/issues/4951 -[gh4955]: https://github.com/tomchristie/django-rest-framework/issues/4955 -[gh4956]: https://github.com/tomchristie/django-rest-framework/issues/4956 -[gh4949]: https://github.com/tomchristie/django-rest-framework/issues/4949 +[gh4959]: https://github.com/encode/django-rest-framework/issues/4959 +[gh4961]: https://github.com/encode/django-rest-framework/issues/4961 +[gh4952]: https://github.com/encode/django-rest-framework/issues/4952 +[gh4953]: https://github.com/encode/django-rest-framework/issues/4953 +[gh4950]: https://github.com/encode/django-rest-framework/issues/4950 +[gh4951]: https://github.com/encode/django-rest-framework/issues/4951 +[gh4955]: https://github.com/encode/django-rest-framework/issues/4955 +[gh4956]: https://github.com/encode/django-rest-framework/issues/4956 +[gh4949]: https://github.com/encode/django-rest-framework/issues/4949 diff --git a/docs/topics/third-party-packages.md b/docs/topics/third-party-packages.md index 933924d3b..aa406084c 100644 --- a/docs/topics/third-party-packages.md +++ b/docs/topics/third-party-packages.md @@ -272,10 +272,10 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque [pypi-register]: https://pypi.python.org/pypi?%3Aaction=register_form [semver]: http://semver.org/ [tox-docs]: https://tox.readthedocs.io/en/latest/ -[drf-compat]: https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/compat.py +[drf-compat]: https://github.com/encode/django-rest-framework/blob/master/rest_framework/compat.py [rest-framework-grid]: https://www.djangopackages.com/grids/g/django-rest-framework/ -[drf-create-pr]: https://github.com/tomchristie/django-rest-framework/compare -[drf-create-issue]: https://github.com/tomchristie/django-rest-framework/issues/new +[drf-create-pr]: https://github.com/encode/django-rest-framework/compare +[drf-create-issue]: https://github.com/encode/django-rest-framework/issues/new [authentication]: ../api-guide/authentication.md [permissions]: ../api-guide/permissions.md [third-party-packages]: ../topics/third-party-packages/#existing-third-party-packages diff --git a/docs/topics/tutorials-and-resources.md b/docs/topics/tutorials-and-resources.md index 3fb1ec258..46cbefea6 100644 --- a/docs/topics/tutorials-and-resources.md +++ b/docs/topics/tutorials-and-resources.md @@ -106,5 +106,5 @@ Want your Django REST Framework talk/tutorial/article to be added to our website [drf-an-intro]: https://realpython.com/blog/python/django-rest-framework-quick-start/ [drf-tutorial]: https://tests4geeks.com/django-rest-framework-tutorial/ [building-a-restful-api-with-drf]: http://agiliq.com/blog/2014/12/building-a-restful-api-with-django-rest-framework/ -[submit-pr]: https://github.com/tomchristie/django-rest-framework +[submit-pr]: https://github.com/encode/django-rest-framework [anna-email]: mailto:anna@django-rest-framework.org diff --git a/docs/tutorial/1-serialization.md b/docs/tutorial/1-serialization.md index e7728e84c..fa54ca6a3 100644 --- a/docs/tutorial/1-serialization.md +++ b/docs/tutorial/1-serialization.md @@ -373,7 +373,7 @@ Our API views don't do anything particularly special at the moment, beyond servi We'll see how we can start to improve things in [part 2 of the tutorial][tut-2]. [quickstart]: quickstart.md -[repo]: https://github.com/tomchristie/rest-framework-tutorial +[repo]: https://github.com/encode/rest-framework-tutorial [sandbox]: http://restframework.herokuapp.com/ [virtualenv]: http://www.virtualenv.org/en/latest/index.html [tut-2]: 2-requests-and-responses.md diff --git a/docs/tutorial/7-schemas-and-client-libraries.md b/docs/tutorial/7-schemas-and-client-libraries.md index d253e4352..d5d13b75b 100644 --- a/docs/tutorial/7-schemas-and-client-libraries.md +++ b/docs/tutorial/7-schemas-and-client-libraries.md @@ -221,8 +221,8 @@ We've reached the end of our tutorial. If you want to get more involved in the [coreapi]: http://www.coreapi.org [corejson]: http://www.coreapi.org/specification/encoding/#core-json-encoding [openapi]: https://openapis.org/ -[repo]: https://github.com/tomchristie/rest-framework-tutorial +[repo]: https://github.com/encode/rest-framework-tutorial [sandbox]: http://restframework.herokuapp.com/ -[github]: https://github.com/tomchristie/django-rest-framework +[github]: https://github.com/encode/django-rest-framework [group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework [twitter]: https://twitter.com/_tomchristie diff --git a/docs_theme/main.html b/docs_theme/main.html index 2f57fad0d..b60b231c2 100644 --- a/docs_theme/main.html +++ b/docs_theme/main.html @@ -114,7 +114,7 @@ {% block content %} {% if page.meta.source %} {% for filename in page.meta.source %} - + {{ filename }} {% endfor %} diff --git a/docs_theme/nav.html b/docs_theme/nav.html index 574c89619..914d80a27 100644 --- a/docs_theme/nav.html +++ b/docs_theme/nav.html @@ -1,7 +1,7 @@