From 9e28915cabaf95c537dec38088d7347761e34ea1 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Mon, 16 Mar 2026 18:46:15 +0000 Subject: [PATCH 1/8] 3.17 release --- docs/community/release-notes.md | 91 +++++++++++++++++++++++++++++++++ docs/index.md | 2 +- rest_framework/__init__.py | 2 +- 3 files changed, 93 insertions(+), 2 deletions(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index 86cab8e2bb..7a60c173ed 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -36,6 +36,97 @@ You can determine your currently installed version using `pip show`: --- +## 3.17.x series + +### 3.17.0 + +**Date**: 17th March 2026 + +#### Breaking changes + +* Drop support for Python 3.9 by (https://github.com/auvipy) in (https://github.com/encode/django-rest-framework/pull/9781) +* Drop deprecated Core API support by (https://github.com/browniebroke) in (https://github.com/encode/django-rest-framework/pull/9895). + +#### Features + +* Add official support for Python 3.14 by (https://github.com/cclauss) in (https://github.com/encode/django-rest-framework/pull/9780) +* Add official Django 6.0 support by (https://github.com/MehrazRumman) in (https://github.com/encode/django-rest-framework/pull/9819) +* Add ability to specify output format for `DurationField` by (https://github.com/sevdog) in (https://github.com/encode/django-rest-framework/pull/8532) +* Add missing decorators: `@versioning_class()`, `@content_negotiation_class()`, `@metadata_class()` for function-based views by (https://github.com/qqii) in +(https://github.com/encode/django-rest-framework/pull/9719) +* Support `violation_error_code` and `violation_error_message` from `UniqueConstraint` in `UniqueTogetherValidator` by (https://github.com/s-aleshin) in +(https://github.com/encode/django-rest-framework/pull/9766) +* Add support for `ipaddress` objects in `JSONEncoder` by (https://github.com/corenting) in (https://github.com/encode/django-rest-framework/pull/9087) +* Add optional support to serialize `BigInteger` to string by (https://github.com/HoodyH) in (https://github.com/encode/django-rest-framework/pull/9775) + +#### Bug fixes + +* Prevent small risk of `Token` overwrite by (https://github.com/mahdirahimi1999) in (https://github.com/encode/django-rest-framework/pull/9754) +* Fix `UniqueTogetherValidator` validation when condition references a read-only field by (https://github.com/ticosax) in (https://github.com/encode/django-rest-framework/pull/9764) +* Fix validation on many to many field when `default=None` by (https://github.com/Genarito) in (https://github.com/encode/django-rest-framework/pull/9790) +* Fix invalid SPDX license expression in `__init__.py` by (https://github.com/TheFunctionalGuy) in (https://github.com/encode/django-rest-framework/pull/9799) +* Fix `HTMLFormRenderer` to ensure a valid `datetime-local` format by (https://github.com/mgaligniana) in (https://github.com/encode/django-rest-framework/pull/9365) +* Fix mutable default arguments in OrderingFilter methods by (https://github.com/killerdevildog) in (https://github.com/encode/django-rest-framework/pull/9742) +* Update TokenAdmin to respect USERNAME_FIELD of the user model. by (https://github.com/m000) in (https://github.com/encode/django-rest-framework/pull/9836) +* Preserve ordering in `MultipleChoiceField` by (https://github.com/fbozhang) in (https://github.com/encode/django-rest-framework/pull/9735) + +### Translations + +* Update French translation by (https://github.com/SebCorbin) in (https://github.com/encode/django-rest-framework/pull/9770) +* Update Brazilian Portuguese translations by (https://github.com/JVPinheiroReis) in (https://github.com/encode/django-rest-framework/pull/9828) +* Fix and improve French translations by (https://github.com/deronnax) in (https://github.com/encode/django-rest-framework/pull/9896) +* Add missing Russian translation by (https://github.com/minorytanaka) in (https://github.com/encode/django-rest-framework/pull/9903) + +### Packaging + +* Migrate packaging to `pyproject.toml` by (https://github.com/deronnax) in (https://github.com/encode/django-rest-framework/pull/9056) +* Setup release workflow with trusted publisher by (https://github.com/browniebroke) in (https://github.com/encode/django-rest-framework/pull/9852) + +### Other changes + +* Refactor token generation to use the `secrets` module by (https://github.com/mahdirahimi1999) in (https://github.com/encode/django-rest-framework/pull/9760) +* Add validation for decorator out-of-order with `(https://github.com/api_view)` by (https://github.com/kernelshard) in (https://github.com/encode/django-rest-framework/pull/9821) +* Switch to mkdocs material theme for documentation by (https://github.com/browniebroke) in (https://github.com/encode/django-rest-framework/pull/9849) + +## New Contributors +* +* (https://github.com/khaledsukkar2) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9717) +* (https://github.com/qqii) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9719) +* (https://github.com/zankoAn) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9788) +* (https://github.com/uche-wealth) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9795) +* (https://github.com/s-aleshin) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9766) +* (https://github.com/Infamous003) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9794) +* (https://github.com/Genarito) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9790) +* (https://github.com/TheFunctionalGuy) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9799) +* (https://github.com/mahdighadiriii) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9800) +* (https://github.com/p-r-a-v-i-n) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9801) +* (https://github.com/itssimon) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9718) +* (https://github.com/huynguyengl99) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9785) +* (https://github.com/corenting) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9087) +* (https://github.com/killerdevildog) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9742) +* (https://github.com/dayandavid) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9820) +* (https://github.com/abhishektiwari) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9826) +* (https://github.com/HoodyH) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9775) +* (https://github.com/Shrikantgiri25) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9808) +* (https://github.com/JVPinheiroReis) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9828) +* (https://github.com/m000) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9836) +* (https://github.com/Nabute) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9767) +* (https://github.com/therealjozber) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9845) +* (https://github.com/nexapytech) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9867) +* (https://github.com/RispaJoseph) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9874) +* (https://github.com/LorenzoGuideri) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9875) +* (https://github.com/maldoinc) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9893) +* (https://github.com/0Nafi0) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9861) +* (https://github.com/MoeSalah1999) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9870) +* (https://github.com/kelsonbrito50) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9901) +* (https://github.com/fbozhang) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9735) +* (https://github.com/minorytanaka) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9903) +* (https://github.com/kosbemrunal) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9904) +* (https://github.com/htvictoire) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9916) + +**Full Changelog**: https://github.com/encode/django-rest-framework/compare/3.16.1...3.17.0 + + ## 3.16.x series ### 3.16.1 diff --git a/docs/index.md b/docs/index.md index 724d2b1999..906b9a1f4d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -65,7 +65,7 @@ Some reasons you might want to use REST framework: REST framework requires the following: -* Django (4.2, 5.0, 5.1, 5.2) +* Django (4.2, 5.0, 5.1, 5.2, 6.0) * Python (3.10, 3.11, 3.12, 3.13, 3.14) We **highly recommend** and only officially support the latest patch release of diff --git a/rest_framework/__init__.py b/rest_framework/__init__.py index 3e1b5d9dd0..37d69721fb 100644 --- a/rest_framework/__init__.py +++ b/rest_framework/__init__.py @@ -8,7 +8,7 @@ """ __title__ = 'Django REST framework' -__version__ = '3.16.1' +__version__ = '3.17.0' __author__ = 'Tom Christie' __license__ = 'BSD-3-Clause' __copyright__ = 'Copyright 2011-2023 Encode OSS Ltd' From 2605728c4f46b09c6021b8bc8cda24084ccfd0eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asif=20Saif=20Uddin=20=7B=22Auvi=22=3A=22=E0=A6=85?= =?UTF-8?q?=E0=A6=AD=E0=A6=BF=22=7D?= Date: Tue, 17 Mar 2026 01:02:30 +0600 Subject: [PATCH 2/8] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- docs/community/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index 7a60c173ed..ca0cbd3786 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -85,7 +85,7 @@ You can determine your currently installed version using `pip show`: ### Other changes * Refactor token generation to use the `secrets` module by (https://github.com/mahdirahimi1999) in (https://github.com/encode/django-rest-framework/pull/9760) -* Add validation for decorator out-of-order with `(https://github.com/api_view)` by (https://github.com/kernelshard) in (https://github.com/encode/django-rest-framework/pull/9821) +* Add validation for decorator out-of-order with `@api_view` by (https://github.com/kernelshard) in (https://github.com/encode/django-rest-framework/pull/9821) * Switch to mkdocs material theme for documentation by (https://github.com/browniebroke) in (https://github.com/encode/django-rest-framework/pull/9849) ## New Contributors From ad687222dda02cfec793afc0a3f99e67493a0acd Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Mon, 16 Mar 2026 19:22:00 +0000 Subject: [PATCH 3/8] Fix formatting issues --- docs/community/release-notes.md | 132 ++++++++++++++++---------------- 1 file changed, 64 insertions(+), 68 deletions(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index ca0cbd3786..5fdac4491c 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -42,90 +42,86 @@ You can determine your currently installed version using `pip show`: **Date**: 17th March 2026 -#### Breaking changes +### Breaking changes -* Drop support for Python 3.9 by (https://github.com/auvipy) in (https://github.com/encode/django-rest-framework/pull/9781) -* Drop deprecated Core API support by (https://github.com/browniebroke) in (https://github.com/encode/django-rest-framework/pull/9895). +* Drop support for Python 3.9 by [@auvipy](https://github.com/auvipy) in [#9781](https://github.com/encode/django-rest-framework/pull/9781) +* Drop deprecated coreapi support by [@browniebroke](https://github.com/browniebroke) in [#9895](https://github.com/encode/django-rest-framework/pull/9895) -#### Features +### Features -* Add official support for Python 3.14 by (https://github.com/cclauss) in (https://github.com/encode/django-rest-framework/pull/9780) -* Add official Django 6.0 support by (https://github.com/MehrazRumman) in (https://github.com/encode/django-rest-framework/pull/9819) -* Add ability to specify output format for `DurationField` by (https://github.com/sevdog) in (https://github.com/encode/django-rest-framework/pull/8532) -* Add missing decorators: `@versioning_class()`, `@content_negotiation_class()`, `@metadata_class()` for function-based views by (https://github.com/qqii) in -(https://github.com/encode/django-rest-framework/pull/9719) -* Support `violation_error_code` and `violation_error_message` from `UniqueConstraint` in `UniqueTogetherValidator` by (https://github.com/s-aleshin) in -(https://github.com/encode/django-rest-framework/pull/9766) -* Add support for `ipaddress` objects in `JSONEncoder` by (https://github.com/corenting) in (https://github.com/encode/django-rest-framework/pull/9087) -* Add optional support to serialize `BigInteger` to string by (https://github.com/HoodyH) in (https://github.com/encode/django-rest-framework/pull/9775) +* Add ability to specify output format for `DurationField` by [@sevdog](https://github.com/sevdog) in [#8532](https://github.com/encode/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/encode/django-rest-framework/pull/9719) +* Add support for Python 3.14 by [@cclauss](https://github.com/cclauss) in [#9780](https://github.com/encode/django-rest-framework/pull/9780) +* 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/encode/django-rest-framework/pull/9766) +* Add support for `ipaddress` objects in `JSONEncoder` by [@corenting](https://github.com/corenting) in [#9087](https://github.com/encode/django-rest-framework/pull/9087) +* Add optional support to serialize `BigInteger` to string by [@HoodyH](https://github.com/HoodyH) in [#9775](https://github.com/encode/django-rest-framework/pull/9775) +* Add Django 6.0 support by [@MehrazRumman](https://github.com/MehrazRumman) in [#9819](https://github.com/encode/django-rest-framework/pull/9819) -#### Bug fixes +### Bug fixes -* Prevent small risk of `Token` overwrite by (https://github.com/mahdirahimi1999) in (https://github.com/encode/django-rest-framework/pull/9754) -* Fix `UniqueTogetherValidator` validation when condition references a read-only field by (https://github.com/ticosax) in (https://github.com/encode/django-rest-framework/pull/9764) -* Fix validation on many to many field when `default=None` by (https://github.com/Genarito) in (https://github.com/encode/django-rest-framework/pull/9790) -* Fix invalid SPDX license expression in `__init__.py` by (https://github.com/TheFunctionalGuy) in (https://github.com/encode/django-rest-framework/pull/9799) -* Fix `HTMLFormRenderer` to ensure a valid `datetime-local` format by (https://github.com/mgaligniana) in (https://github.com/encode/django-rest-framework/pull/9365) -* Fix mutable default arguments in OrderingFilter methods by (https://github.com/killerdevildog) in (https://github.com/encode/django-rest-framework/pull/9742) -* Update TokenAdmin to respect USERNAME_FIELD of the user model. by (https://github.com/m000) in (https://github.com/encode/django-rest-framework/pull/9836) -* Preserve ordering in `MultipleChoiceField` by (https://github.com/fbozhang) in (https://github.com/encode/django-rest-framework/pull/9735) +* Prevent small risk of `Token` overwrite by [@mahdirahimi1999](https://github.com/mahdirahimi1999) in [#9754](https://github.com/encode/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/encode/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/encode/django-rest-framework/pull/9790) +* Fix invalid SPDX license expression in `__init__.py` by [@TheFunctionalGuy](https://github.com/TheFunctionalGuy) in [#9799](https://github.com/encode/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/encode/django-rest-framework/pull/9365) +* Fix mutable default arguments in OrderingFilter methods by [@killerdevildog](https://github.com/killerdevildog) in [#9742](https://github.com/encode/django-rest-framework/pull/9742) +* Update TokenAdmin to respect USERNAME_FIELD of the user model. by [@m000](https://github.com/m000) in [#9836](https://github.com/encode/django-rest-framework/pull/9836) +* Preserve ordering in `MultipleChoiceField` by [@fbozhang](https://github.com/fbozhang) in [#9735](https://github.com/encode/django-rest-framework/pull/9735) ### Translations -* Update French translation by (https://github.com/SebCorbin) in (https://github.com/encode/django-rest-framework/pull/9770) -* Update Brazilian Portuguese translations by (https://github.com/JVPinheiroReis) in (https://github.com/encode/django-rest-framework/pull/9828) -* Fix and improve French translations by (https://github.com/deronnax) in (https://github.com/encode/django-rest-framework/pull/9896) -* Add missing Russian translation by (https://github.com/minorytanaka) in (https://github.com/encode/django-rest-framework/pull/9903) +* Update French translation by [@SebCorbin](https://github.com/SebCorbin) in [#9770](https://github.com/encode/django-rest-framework/pull/9770) +* Update Brazilian Portuguese translations by [@JVPinheiroReis](https://github.com/JVPinheiroReis) in [#9828](https://github.com/encode/django-rest-framework/pull/9828) +* Fix and improve French translations by [@deronnax](https://github.com/deronnax) in [#9896](https://github.com/encode/django-rest-framework/pull/9896) +* Add missing Russian translation by [@minorytanaka](https://github.com/minorytanaka) in [#9903](https://github.com/encode/django-rest-framework/pull/9903) ### Packaging -* Migrate packaging to `pyproject.toml` by (https://github.com/deronnax) in (https://github.com/encode/django-rest-framework/pull/9056) -* Setup release workflow with trusted publisher by (https://github.com/browniebroke) in (https://github.com/encode/django-rest-framework/pull/9852) +* Migrate packaging to `pyproject.toml` by [@deronnax](https://github.com/deronnax) in [#9056](https://github.com/encode/django-rest-framework/pull/9056) +* Setup release workflow with trusted publisher by [@browniebroke](https://github.com/browniebroke) in [#9852](https://github.com/encode/django-rest-framework/pull/9852) ### Other changes -* Refactor token generation to use the `secrets` module by (https://github.com/mahdirahimi1999) in (https://github.com/encode/django-rest-framework/pull/9760) -* Add validation for decorator out-of-order with `@api_view` by (https://github.com/kernelshard) in (https://github.com/encode/django-rest-framework/pull/9821) -* Switch to mkdocs material theme for documentation by (https://github.com/browniebroke) in (https://github.com/encode/django-rest-framework/pull/9849) +* Refactor token generation to use the `secrets` module by [@mahdirahimi1999](https://github.com/mahdirahimi1999) in [#9760](https://github.com/encode/django-rest-framework/pull/9760) +* Add validation for decorator out-of-order with `@api_view` by [@kernelshard](https://github.com/kernelshard) in [#9821](https://github.com/encode/django-rest-framework/pull/9821) +* Switch to mkdocs material theme for documentation by [@browniebroke](https://github.com/browniebroke) in [#9849](https://github.com/encode/django-rest-framework/pull/9849) ## New Contributors -* -* (https://github.com/khaledsukkar2) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9717) -* (https://github.com/qqii) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9719) -* (https://github.com/zankoAn) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9788) -* (https://github.com/uche-wealth) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9795) -* (https://github.com/s-aleshin) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9766) -* (https://github.com/Infamous003) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9794) -* (https://github.com/Genarito) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9790) -* (https://github.com/TheFunctionalGuy) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9799) -* (https://github.com/mahdighadiriii) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9800) -* (https://github.com/p-r-a-v-i-n) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9801) -* (https://github.com/itssimon) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9718) -* (https://github.com/huynguyengl99) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9785) -* (https://github.com/corenting) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9087) -* (https://github.com/killerdevildog) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9742) -* (https://github.com/dayandavid) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9820) -* (https://github.com/abhishektiwari) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9826) -* (https://github.com/HoodyH) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9775) -* (https://github.com/Shrikantgiri25) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9808) -* (https://github.com/JVPinheiroReis) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9828) -* (https://github.com/m000) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9836) -* (https://github.com/Nabute) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9767) -* (https://github.com/therealjozber) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9845) -* (https://github.com/nexapytech) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9867) -* (https://github.com/RispaJoseph) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9874) -* (https://github.com/LorenzoGuideri) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9875) -* (https://github.com/maldoinc) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9893) -* (https://github.com/0Nafi0) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9861) -* (https://github.com/MoeSalah1999) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9870) -* (https://github.com/kelsonbrito50) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9901) -* (https://github.com/fbozhang) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9735) -* (https://github.com/minorytanaka) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9903) -* (https://github.com/kosbemrunal) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9904) -* (https://github.com/htvictoire) made their first contribution in (https://github.com/encode/django-rest-framework/pull/9916) - -**Full Changelog**: https://github.com/encode/django-rest-framework/compare/3.16.1...3.17.0 - +* [@khaledsukkar2](https://github.com/khaledsukkar2) made their first contribution in [#9717](https://github.com/encode/django-rest-framework/pull/9717) +* [@qqii](https://github.com/qqii) made their first contribution in [#9719](https://github.com/encode/django-rest-framework/pull/9719) +* [@zankoAn](https://github.com/zankoAn) made their first contribution in [#9788](https://github.com/encode/django-rest-framework/pull/9788) +* [@uche-wealth](https://github.com/uche-wealth) made their first contribution in [#9795](https://github.com/encode/django-rest-framework/pull/9795) +* [@s-aleshin](https://github.com/s-aleshin) made their first contribution in [#9766](https://github.com/encode/django-rest-framework/pull/9766) +* [@Infamous003](https://github.com/Infamous003) made their first contribution in [#9794](https://github.com/encode/django-rest-framework/pull/9794) +* [@Genarito](https://github.com/Genarito) made their first contribution in [#9790](https://github.com/encode/django-rest-framework/pull/9790) +* [@TheFunctionalGuy](https://github.com/TheFunctionalGuy) made their first contribution in [#9799](https://github.com/encode/django-rest-framework/pull/9799) +* [@mahdighadiriii](https://github.com/mahdighadiriii) made their first contribution in [#9800](https://github.com/encode/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/encode/django-rest-framework/pull/9801) +* [@itssimon](https://github.com/itssimon) made their first contribution in [#9718](https://github.com/encode/django-rest-framework/pull/9718) +* [@huynguyengl99](https://github.com/huynguyengl99) made their first contribution in [#9785](https://github.com/encode/django-rest-framework/pull/9785) +* [@corenting](https://github.com/corenting) made their first contribution in [#9087](https://github.com/encode/django-rest-framework/pull/9087) +* [@killerdevildog](https://github.com/killerdevildog) made their first contribution in [#9742](https://github.com/encode/django-rest-framework/pull/9742) +* [@dayandavid](https://github.com/dayandavid) made their first contribution in [#9820](https://github.com/encode/django-rest-framework/pull/9820) +* [@abhishektiwari](https://github.com/abhishektiwari) made their first contribution in [#9826](https://github.com/encode/django-rest-framework/pull/9826) +* [@HoodyH](https://github.com/HoodyH) made their first contribution in [#9775](https://github.com/encode/django-rest-framework/pull/9775) +* [@Shrikantgiri25](https://github.com/Shrikantgiri25) made their first contribution in [#9808](https://github.com/encode/django-rest-framework/pull/9808) +* [@JVPinheiroReis](https://github.com/JVPinheiroReis) made their first contribution in [#9828](https://github.com/encode/django-rest-framework/pull/9828) +* [@m000](https://github.com/m000) made their first contribution in [#9836](https://github.com/encode/django-rest-framework/pull/9836) +* [@Nabute](https://github.com/Nabute) made their first contribution in [#9767](https://github.com/encode/django-rest-framework/pull/9767) +* [@therealjozber](https://github.com/therealjozber) made their first contribution in [#9845](https://github.com/encode/django-rest-framework/pull/9845) +* [@nexapytech](https://github.com/nexapytech) made their first contribution in [#9867](https://github.com/encode/django-rest-framework/pull/9867) +* [@RispaJoseph](https://github.com/RispaJoseph) made their first contribution in [#9874](https://github.com/encode/django-rest-framework/pull/9874) +* [@LorenzoGuideri](https://github.com/LorenzoGuideri) made their first contribution in [#9875](https://github.com/encode/django-rest-framework/pull/9875) +* [@maldoinc](https://github.com/maldoinc) made their first contribution in [#9893](https://github.com/encode/django-rest-framework/pull/9893) +* [@0Nafi0](https://github.com/0Nafi0) made their first contribution in [#9861](https://github.com/encode/django-rest-framework/pull/9861) +* [@MoeSalah1999](https://github.com/MoeSalah1999) made their first contribution in [#9870](https://github.com/encode/django-rest-framework/pull/9870) +* [@kelsonbrito50](https://github.com/kelsonbrito50) made their first contribution in [#9901](https://github.com/encode/django-rest-framework/pull/9901) +* [@fbozhang](https://github.com/fbozhang) made their first contribution in [#9735](https://github.com/encode/django-rest-framework/pull/9735) +* [@minorytanaka](https://github.com/minorytanaka) made their first contribution in [#9903](https://github.com/encode/django-rest-framework/pull/9903) +* [@kosbemrunal](https://github.com/kosbemrunal) made their first contribution in [#9904](https://github.com/encode/django-rest-framework/pull/9904) +* [@htvictoire](https://github.com/htvictoire) made their first contribution in [#9916](https://github.com/encode/django-rest-framework/pull/9916) + +**Full Changelog**: [3.16.1...3.17.0](https://github.com/encode/django-rest-framework/compare/3.16.1...3.17.0) ## 3.16.x series From aa006b8d12a0876cfcaeb15c49aaf71b4f0832e4 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Mon, 16 Mar 2026 19:23:39 +0000 Subject: [PATCH 4/8] Fix headings levels --- docs/community/release-notes.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index 5fdac4491c..711758a0ee 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -42,12 +42,12 @@ You can determine your currently installed version using `pip show`: **Date**: 17th March 2026 -### Breaking changes +#### Breaking changes * Drop support for Python 3.9 by [@auvipy](https://github.com/auvipy) in [#9781](https://github.com/encode/django-rest-framework/pull/9781) * Drop deprecated coreapi support by [@browniebroke](https://github.com/browniebroke) in [#9895](https://github.com/encode/django-rest-framework/pull/9895) -### Features +#### Features * Add ability to specify output format for `DurationField` by [@sevdog](https://github.com/sevdog) in [#8532](https://github.com/encode/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/encode/django-rest-framework/pull/9719) @@ -57,7 +57,7 @@ You can determine your currently installed version using `pip show`: * Add optional support to serialize `BigInteger` to string by [@HoodyH](https://github.com/HoodyH) in [#9775](https://github.com/encode/django-rest-framework/pull/9775) * Add Django 6.0 support by [@MehrazRumman](https://github.com/MehrazRumman) in [#9819](https://github.com/encode/django-rest-framework/pull/9819) -### Bug fixes +#### Bug fixes * Prevent small risk of `Token` overwrite by [@mahdirahimi1999](https://github.com/mahdirahimi1999) in [#9754](https://github.com/encode/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/encode/django-rest-framework/pull/9764) @@ -68,25 +68,26 @@ You can determine your currently installed version using `pip show`: * Update TokenAdmin to respect USERNAME_FIELD of the user model. by [@m000](https://github.com/m000) in [#9836](https://github.com/encode/django-rest-framework/pull/9836) * Preserve ordering in `MultipleChoiceField` by [@fbozhang](https://github.com/fbozhang) in [#9735](https://github.com/encode/django-rest-framework/pull/9735) -### Translations +#### Translations * Update French translation by [@SebCorbin](https://github.com/SebCorbin) in [#9770](https://github.com/encode/django-rest-framework/pull/9770) * Update Brazilian Portuguese translations by [@JVPinheiroReis](https://github.com/JVPinheiroReis) in [#9828](https://github.com/encode/django-rest-framework/pull/9828) * Fix and improve French translations by [@deronnax](https://github.com/deronnax) in [#9896](https://github.com/encode/django-rest-framework/pull/9896) * Add missing Russian translation by [@minorytanaka](https://github.com/minorytanaka) in [#9903](https://github.com/encode/django-rest-framework/pull/9903) -### Packaging +#### Packaging * Migrate packaging to `pyproject.toml` by [@deronnax](https://github.com/deronnax) in [#9056](https://github.com/encode/django-rest-framework/pull/9056) * Setup release workflow with trusted publisher by [@browniebroke](https://github.com/browniebroke) in [#9852](https://github.com/encode/django-rest-framework/pull/9852) -### Other changes +#### Other changes * Refactor token generation to use the `secrets` module by [@mahdirahimi1999](https://github.com/mahdirahimi1999) in [#9760](https://github.com/encode/django-rest-framework/pull/9760) * Add validation for decorator out-of-order with `@api_view` by [@kernelshard](https://github.com/kernelshard) in [#9821](https://github.com/encode/django-rest-framework/pull/9821) * Switch to mkdocs material theme for documentation by [@browniebroke](https://github.com/browniebroke) in [#9849](https://github.com/encode/django-rest-framework/pull/9849) -## New Contributors +#### New Contributors + * [@khaledsukkar2](https://github.com/khaledsukkar2) made their first contribution in [#9717](https://github.com/encode/django-rest-framework/pull/9717) * [@qqii](https://github.com/qqii) made their first contribution in [#9719](https://github.com/encode/django-rest-framework/pull/9719) * [@zankoAn](https://github.com/zankoAn) made their first contribution in [#9788](https://github.com/encode/django-rest-framework/pull/9788) From 246d2d4b2f5870cf9041050ba3b54983db91c465 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Mon, 16 Mar 2026 19:31:16 +0000 Subject: [PATCH 5/8] Typo 'Setup' -> 'Set up' Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- docs/community/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index 711758a0ee..f0f5c4febf 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -78,7 +78,7 @@ You can determine your currently installed version using `pip show`: #### Packaging * Migrate packaging to `pyproject.toml` by [@deronnax](https://github.com/deronnax) in [#9056](https://github.com/encode/django-rest-framework/pull/9056) -* Setup release workflow with trusted publisher by [@browniebroke](https://github.com/browniebroke) in [#9852](https://github.com/encode/django-rest-framework/pull/9852) +* Set up release workflow with trusted publisher by [@browniebroke](https://github.com/browniebroke) in [#9852](https://github.com/encode/django-rest-framework/pull/9852) #### Other changes From 6c166836fa97050b389745312cb71a5fd14bdd54 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Mon, 16 Mar 2026 19:33:47 +0000 Subject: [PATCH 6/8] Address comments from code review --- docs/community/release-notes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index f0f5c4febf..ef65ec0b03 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -65,7 +65,7 @@ You can determine your currently installed version using `pip show`: * Fix invalid SPDX license expression in `__init__.py` by [@TheFunctionalGuy](https://github.com/TheFunctionalGuy) in [#9799](https://github.com/encode/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/encode/django-rest-framework/pull/9365) * Fix mutable default arguments in OrderingFilter methods by [@killerdevildog](https://github.com/killerdevildog) in [#9742](https://github.com/encode/django-rest-framework/pull/9742) -* Update TokenAdmin to respect USERNAME_FIELD of the user model. by [@m000](https://github.com/m000) in [#9836](https://github.com/encode/django-rest-framework/pull/9836) +* Update TokenAdmin to respect USERNAME_FIELD of the user model by [@m000](https://github.com/m000) in [#9836](https://github.com/encode/django-rest-framework/pull/9836) * Preserve ordering in `MultipleChoiceField` by [@fbozhang](https://github.com/fbozhang) in [#9735](https://github.com/encode/django-rest-framework/pull/9735) #### Translations @@ -86,7 +86,7 @@ You can determine your currently installed version using `pip show`: * Add validation for decorator out-of-order with `@api_view` by [@kernelshard](https://github.com/kernelshard) in [#9821](https://github.com/encode/django-rest-framework/pull/9821) * Switch to mkdocs material theme for documentation by [@browniebroke](https://github.com/browniebroke) in [#9849](https://github.com/encode/django-rest-framework/pull/9849) -#### New Contributors +#### New Contributors * [@khaledsukkar2](https://github.com/khaledsukkar2) made their first contribution in [#9717](https://github.com/encode/django-rest-framework/pull/9717) * [@qqii](https://github.com/qqii) made their first contribution in [#9719](https://github.com/encode/django-rest-framework/pull/9719) From 7a4c1e29cb36c9ddc3c7a27e283ef66ca001c91d Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Wed, 18 Mar 2026 11:57:36 +0000 Subject: [PATCH 7/8] Add change suggested in code review --- docs/community/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index ef65ec0b03..d065b6f6a4 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -78,6 +78,7 @@ You can determine your currently installed version using `pip show`: #### Packaging * Migrate packaging to `pyproject.toml` by [@deronnax](https://github.com/deronnax) in [#9056](https://github.com/encode/django-rest-framework/pull/9056) +* Move package data rules from `MANIFEST.in` to `pyproject.toml` by [@p-r-a-v-i-n](https://github.com/p-r-a-v-i-n) in [#9825](https://github.com/encode/django-rest-framework/pull/9825) * Set up release workflow with trusted publisher by [@browniebroke](https://github.com/browniebroke) in [#9852](https://github.com/encode/django-rest-framework/pull/9852) #### Other changes From 5abd696aedb8617fcfd535d4d08518ccf20fe7b3 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Wed, 18 Mar 2026 20:22:05 +0000 Subject: [PATCH 8/8] Update release date --- docs/community/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index d065b6f6a4..458a4f23b5 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -40,7 +40,7 @@ You can determine your currently installed version using `pip show`: ### 3.17.0 -**Date**: 17th March 2026 +**Date**: 18th March 2026 #### Breaking changes