-
-
Notifications
You must be signed in to change notification settings - Fork 7k
Prepare 3.17 release notes and announcement #9811
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| <style> | ||
| .promo li a { | ||
| float: left; | ||
| width: 130px; | ||
| height: 20px; | ||
| text-align: center; | ||
| margin: 10px 30px; | ||
| padding: 150px 0 0 0; | ||
| background-position: 0 50%; | ||
| background-size: 130px auto; | ||
| background-repeat: no-repeat; | ||
| font-size: 120%; | ||
| color: black; | ||
| } | ||
| .promo li { | ||
| list-style: none; | ||
| } | ||
| </style> | ||
|
|
||
| # Django REST framework 3.17 | ||
|
|
||
| At the Internet, on October 31th, 2025, we are happy to announce the release of Django REST framework 3.17. | ||
|
|
||
| ## Move to Django-Commons | ||
|
|
||
| The project development has moved from [@encode](https://github.com/encode) to the [@django-commons](https://github.com/django-commons) organization on GitHub. The maintenance team being the project remains mostly unchanged since the last release but Kim stepped down from the team and is no longer involved. We're grateful for all the work Kim put into the project over the years. | ||
|
|
||
| With Kim stepping down, it felt like the project needed a new home and it felt like Django commons was the right place for it. The organization is set up around an admin team that | ||
|
|
||
| ## Updated Python support | ||
|
|
||
| The latest release now fully supports Python 3.14, and Python 3.9 support was dropped. Please refer to Django support page to know which Django versions support 3.14. | ||
|
|
||
| The current minimum versions of Django remains 4.2. | ||
|
|
||
| ## Delay CoreAPI deprecation | ||
|
|
||
| This was initially planned for 3.17, but we unfortunately didn't find the time to handle this in time so we mad the decision to delay it until 3.18. The exception being raised has been renamed from `RemovedInDRF317Warning` to `RemovedInDRF318Warning` so you may have to update your warnings filters accordingly. | ||
|
|
||
| ## Migrated packaging to `pyproject.toml` | ||
|
|
||
| The packaging of the project has been migrated to `pyproject.toml` to align with modern packaging best practices. We don't expect this to have any impacts since Django itself has already migrated. | ||
|
|
||
| ## Improved error messages for UniqueConstraint | ||
|
|
||
| The validation for [UniqueConstraint](https://docs.djangoproject.com/en/stable/ref/models/constraints/#uniqueconstraint) has been improved to support better error messages (via `violation_error_code` and `violation_error_message`) | ||
|
|
||
| ## Other fixes and improvements | ||
|
|
||
| There are a few fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behavior. | ||
|
|
||
| See the [release notes](release-notes.md) page for a complete listing. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -36,6 +36,86 @@ You can determine your currently installed version using `pip show`: | |
|
|
||
| --- | ||
|
|
||
| ## 3.17.x series | ||
|
|
||
| ### 3.17.0 | ||
|
|
||
| **Date**: 31th October 2025 | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. should be November now |
||
|
|
||
| This is a significant release that includes improvements and bugfixes and well as keeping up with upstream Python support. | ||
|
|
||
| This is also the first release made from the [@django-commons](https://github.com/django-commons) organization. The people in the maintenance team haven't changed much since the previous release. | ||
|
|
||
| ### Features | ||
|
|
||
| * Add support for Python 3.14 by [@cclauss](https://github.com/cclauss) in [#9780](https://github.com/django-commons/django-rest-framework/pull/9780) | ||
| * Drop support for Python 3.9 by [@auvipy](https://github.com/auvipy) in [#9781](https://github.com/django-commons/django-rest-framework/pull/9781) | ||
| * Add ability to specify output format for `DurationField` by [@sevdog](https://github.com/sevdog) in [#8532](https://github.com/django-commons/django-rest-framework/pull/8532) | ||
| * Add missing decorators: `@versioning_class()`, `@content_negotiation_class()`, `@metadata_class()` for function-based views by [@qqii](https://github.com/qqii) in [#9719](https://github.com/django-commons/django-rest-framework/pull/9719) | ||
| * Support `violation_error_code` and `violation_error_message` from `UniqueConstraint` in `UniqueTogetherValidator` by [@s-aleshin](https://github.com/s-aleshin) in [#9766](https://github.com/django-commons/django-rest-framework/pull/9766) | ||
| * Add support for `ipaddress` objects in `JSONEncoder` by [@corenting](https://github.com/corenting) in [#9087](https://github.com/django-commons/django-rest-framework/pull/9087) | ||
| * Delay CoreAPI deprecation until DRF 3.18 by [@browniebroke](https://github.com/browniebroke) in [#9810](https://github.com/django-commons/django-rest-framework/pull/9810). We didn't find the time to handle this for 3.17 as it was initially planned. The exception being raised has been renamed from `RemovedInDRF317Warning` to `RemovedInDRF318Warning` so you may have to update your warnings filters accordingly. | ||
|
|
||
| ### Packaging | ||
|
|
||
| * Migrate packaging to `pyproject.toml` by [@deronnax](https://github.com/deronnax) in [#9056](https://github.com/django-commons/django-rest-framework/pull/9056). | ||
|
|
||
| ### Bug fixes | ||
|
|
||
| * Refactor token generation to use the `secrets` module by [@mahdirahimi1999](https://github.com/mahdirahimi1999) in [#9760](https://github.com/django-commons/django-rest-framework/pull/9760) | ||
| * Prevent small risk of `Token` overwrite by [@mahdirahimi1999](https://github.com/mahdirahimi1999) in [#9754](https://github.com/django-commons/django-rest-framework/pull/9754) | ||
| * Fix `UniqueTogetherValidator` validation when condition references a read-only field by [@ticosax](https://github.com/ticosax) in [#9764](https://github.com/django-commons/django-rest-framework/pull/9764) | ||
| * Fix validation on many to many field when `default=None` by [@Genarito](https://github.com/Genarito) in [#9790](https://github.com/django-commons/django-rest-framework/pull/9790) | ||
| * Fix invalid SPDX license expression in `__init__.py` by [@TheFunctionalGuy](https://github.com/TheFunctionalGuy) in [#9799](https://github.com/django-commons/django-rest-framework/pull/9799) | ||
| * Fix `HTMLFormRenderer` to ensure a valid `datetime-local` format by [@mgaligniana](https://github.com/mgaligniana) in [#9365](https://github.com/django-commons/django-rest-framework/pull/9365) | ||
| * Fix mutable default arguments in OrderingFilter methods by [@killerdevildog](https://github.com/killerdevildog) in [#9742](https://github.com/django-commons/django-rest-framework/pull/9742) | ||
|
|
||
| ### Translations | ||
|
|
||
| * Update french translation by [@SebCorbin](https://github.com/SebCorbin) in [#9770](https://github.com/django-commons/django-rest-framework/pull/9770) | ||
|
|
||
| ### Documentation and internal changes | ||
|
|
||
| * Rename `master` branch to `main` by [@browniebroke](https://github.com/browniebroke) in [#9761](https://github.com/django-commons/django-rest-framework/pull/9761) | ||
| * Restore references to GitHub Issues and Discussions by [@browniebroke](https://github.com/browniebroke) in [#9757](https://github.com/django-commons/django-rest-framework/pull/9757) | ||
| * Fix a number of broken links in the documentation by [@browniebroke](https://github.com/browniebroke) in [#9758](https://github.com/django-commons/django-rest-framework/pull/9758) | ||
| * Add `drf-shapeless-serializers` to third-party package documentation by [@khaledsukkar2](https://github.com/khaledsukkar2) in [#9717](https://github.com/django-commons/django-rest-framework/pull/9717) | ||
| * Document how to transform factory request to DRF request by [@mgaligniana](https://github.com/mgaligniana) in [#9380](https://github.com/django-commons/django-rest-framework/pull/9380) | ||
| * Remove outdated reference to `AllowPUTAsCreateMixin` in the documentation by [@zankoAn](https://github.com/zankoAn) in [#9788](https://github.com/django-commons/django-rest-framework/pull/9788) | ||
| * Clarify where settings come from in filtering documentation by [@journpy](https://github.com/journpy) in [#9795](https://github.com/django-commons/django-rest-framework/pull/9795) | ||
| * Add syntax highlighting to code examples in tutorial by [@Infamous003](https://github.com/Infamous003) in [#9794](https://github.com/django-commons/django-rest-framework/pull/9794) | ||
| * Illustrate `last_page_strings` with an example in the documentation by [@mahdighadiriii](https://github.com/mahdighadiriii) in [#9800](https://github.com/django-commons/django-rest-framework/pull/9800) | ||
| * Add section about avoiding N+1 queries in generic views by [@p-r-a-v-i-n](https://github.com/p-r-a-v-i-n) in [#9801](https://github.com/django-commons/django-rest-framework/pull/9801) | ||
| * Add Apitally to third party packages documentation by [@itssimon](https://github.com/itssimon) in [#9718](https://github.com/django-commons/django-rest-framework/pull/9718) | ||
| * Remove Transifex mentions from documentation by [@TGoddessana](https://github.com/TGoddessana) in [#9572](https://github.com/django-commons/django-rest-framework/pull/9572) | ||
| * Add `drf-auth-kit` to third party authentication packages documentation by [@huynguyengl99](https://github.com/huynguyengl99) in [#9785](https://github.com/django-commons/django-rest-framework/pull/9785) | ||
| * Standardize spelling to American English in documentation by [@p-r-a-v-i-n](https://github.com/p-r-a-v-i-n) in [#9804](https://github.com/django-commons/django-rest-framework/pull/9804) | ||
|
|
||
| * Adjust CI matrix to reflect upstream Django support by [@browniebroke](https://github.com/browniebroke) in [#9768](https://github.com/django-commons/django-rest-framework/pull/9768) | ||
| * Automate documentation deployment by [@browniebroke](https://github.com/browniebroke) in [#9759](https://github.com/django-commons/django-rest-framework/pull/9759) | ||
| * Set minimum Python version to 3.10 in pyupgrade pre-commit hook by [@browniebroke](https://github.com/browniebroke) in [#9798](https://github.com/django-commons/django-rest-framework/pull/9798) | ||
| * Update blacken-docs and black to latest versions by [@browniebroke](https://github.com/browniebroke) in [#9802](https://github.com/django-commons/django-rest-framework/pull/9802) | ||
| * Update pre-commit hooks by [@browniebroke](https://github.com/browniebroke) in [#9805](https://github.com/django-commons/django-rest-framework/pull/9805) | ||
|
|
||
| ## New Contributors | ||
|
|
||
| * [@khaledsukkar2](https://github.com/khaledsukkar2) made their first contribution in [#9717](https://github.com/django-commons/django-rest-framework/pull/9717) | ||
| * [@qqii](https://github.com/qqii) made their first contribution in [#9719](https://github.com/django-commons/django-rest-framework/pull/9719) | ||
| * [@zankoAn](https://github.com/zankoAn) made their first contribution in [#9788](https://github.com/django-commons/django-rest-framework/pull/9788) | ||
| * [@journpy](https://github.com/journpy) made their first contribution in [#9795](https://github.com/django-commons/django-rest-framework/pull/9795) | ||
| * [@s-aleshin](https://github.com/s-aleshin) made their first contribution in [#9766](https://github.com/django-commons/django-rest-framework/pull/9766) | ||
| * [@Infamous003](https://github.com/Infamous003) made their first contribution in [#9794](https://github.com/django-commons/django-rest-framework/pull/9794) | ||
| * [@Genarito](https://github.com/Genarito) made their first contribution in [#9790](https://github.com/django-commons/django-rest-framework/pull/9790) | ||
| * [@TheFunctionalGuy](https://github.com/TheFunctionalGuy) made their first contribution in [#9799](https://github.com/django-commons/django-rest-framework/pull/9799) | ||
| * [@mahdighadiriii](https://github.com/mahdighadiriii) made their first contribution in [#9800](https://github.com/django-commons/django-rest-framework/pull/9800) | ||
| * [@p-r-a-v-i-n](https://github.com/p-r-a-v-i-n) made their first contribution in [#9801](https://github.com/django-commons/django-rest-framework/pull/9801) | ||
| * [@itssimon](https://github.com/itssimon) made their first contribution in [#9718](https://github.com/django-commons/django-rest-framework/pull/9718) | ||
| * [@huynguyengl99](https://github.com/huynguyengl99) made their first contribution in [#9785](https://github.com/django-commons/django-rest-framework/pull/9785) | ||
| * [@corenting](https://github.com/corenting) made their first contribution in [#9087](https://github.com/django-commons/django-rest-framework/pull/9087) | ||
| * [@killerdevildog](https://github.com/killerdevildog) made their first contribution in [#9742](https://github.com/django-commons/django-rest-framework/pull/9742) | ||
|
|
||
| [Full Changelog](https://github.com/django-commons/django-rest-framework/compare/3.16.1...3.17.0) | ||
|
|
||
| ## 3.16.x series | ||
|
|
||
| ### 3.16.1 | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
november?