You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The 3.9 release gives access to _extra actions_ in the Browsable API, introduces composable permissions and built-in [OpenAPI][openapi] schema support.
23
+
24
+
---
25
+
26
+
## Funding
27
+
28
+
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
29
+
**[signing up for a paid plan][funding]**.
30
+
31
+
32
+
TODO: UPDATE SPONSORS.
33
+
34
+
*We'd like to say thanks in particular 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/), and [Rollbar](https://rollbar.com).*
35
+
36
+
---
37
+
38
+
## ViewSet _Extra Actions_ available in the Browsable API
39
+
40
+
Following the introduction of the `action` decorator in v3.8, _extra actions_ defined on a ViewSet are now available
41
+
from the Browsable API.
42
+
43
+

44
+
45
+
When defined, a dropdown of "Extra Actions", appropriately filtered to detail/non-detail actions, is displayed.
46
+
47
+
## In-built OpenAPI schema support
48
+
49
+
TODO
50
+
51
+
---
52
+
53
+
## Deprecations
54
+
55
+
### `DjangoObjectPermissionsFilter` moved to third-party package.
56
+
57
+
The `DjangoObjectPermissionsFilter` class is pending deprecation, will be deprecated in 3.10 and removed entirely in 3.11.
58
+
59
+
It has been moved to the third-party [`djangorestframework-guardian`](https://github.com/rpkilby/django-rest-framework-guardian)
60
+
package. Please use this instead.
61
+
62
+
### Router argument/method renamed to use `basename` for consistency.
63
+
64
+
* The `Router.register``base_name` argument has been renamed in favor of `basename`.
65
+
* The `Router.get_default_base_name` method has been renamed in favor of `Router.get_default_basename`. [#5990][gh5990]
0 commit comments