Django REST framework 3.8
The 3.8 release is a maintenance focused release resolving a large number of previously outstanding issues and laying the foundations for future changes.
Funding
If you use REST framework commercially and would like to see this work continue, we strongly encourage you to invest in its continued development by signing up for a paid plan.
We'd like to say thanks in particular our premium backers, Rover, Sentry, Stream, Machinalis, and Rollbar.
Breaking Changes
default
on Field.Altered the behaviour of read_only
plus
#5886 read_only
fields will now always be excluded from writable fields.
Previously read_only
fields when combined with a default
value would use the default
for create and update
operations. This was counter-intuitive in some circumstances and led to difficulties supporting dotted source
attributes on nullable relations.
In order to maintain the old behaviour you may need to pass the value of read_only
fields when calling save()
in
the view:
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
Alternatively you may override save()
or create()
or update()
on the serialiser as appropriate.
Deprecations
list_route
and action
decorator replaces detail_route
#5705 list_route
and detail_route
have been merge into a single action
decorator. This improves viewset action introspection, and will allow extra actions to be displayed in the Browsable API in future versions.
Both list_route
and detail_route
are now pending deprecation. They will be deprecated in 3.9 and removed entirely
in 3.10.
The new action
decorator takes a boolean detail
argument.
- Replace
detail_route
uses with@action(detail=True)
. - Replace
list_route
uses with@action(detail=False)
.
exclude_from_schema
Both APIView.exclude_from_schema
and the exclude_from_schema
argument to the @api_view
decorator are now deprecated. They will be removed entirely in 3.9.
For APIView
you should instead set a schema = None
attribute on the view class.
For function based views the @schema
decorator can be used to exclude the view from the schema, by using @schema(None)
.
Minor fixes and improvements
There are a large number of minor fixes and improvements in this release. See the release notes page for a complete listing.
What's next
We're currently working towards moving to using OpenAPI as our default schema output. We'll also be revisiting our API documentation generation and client libraries.
We're doing some consolidation in order to make this happen. It's planned that 3.9 will drop the coreapi
and coreschema
libraries, and instead use apistar
for the API documentation generation, schema generation, and API client libraries.