Skip to content

Commit c4aa28f

Browse files
committed
2 parents 84ca4e3 + 3ba8ef9 commit c4aa28f

22 files changed

+348
-261
lines changed

.github/ISSUE_TEMPLATE/1-issue.md

-17
This file was deleted.

.github/ISSUE_TEMPLATE/config.yml

-6
This file was deleted.

.github/workflows/main.yml

+2-3
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@ on:
99
jobs:
1010
tests:
1111
name: Python ${{ matrix.python-version }}
12-
runs-on: ubuntu-20.04
12+
runs-on: ubuntu-24.04
1313

1414
strategy:
1515
matrix:
1616
python-version:
17-
- '3.8'
1817
- '3.9'
1918
- '3.10'
2019
- '3.11'
@@ -51,7 +50,7 @@ jobs:
5150

5251
test-docs:
5352
name: Test documentation links
54-
runs-on: ubuntu-22.04
53+
runs-on: ubuntu-24.04
5554
steps:
5655
- uses: actions/checkout@v4
5756

CONTRIBUTING.md

-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,4 @@
22

33
At this point in its lifespan we consider Django REST framework to be essentially feature-complete. We may accept pull requests that track the continued development of Django versions, but would prefer not to accept new features or code formatting changes.
44

5-
Apart from minor documentation changes, the [GitHub discussions page](https://github.com/encode/django-rest-framework/discussions) should generally be your starting point. Please only raise an issue or pull request if you've been recommended to do so after discussion.
6-
75
The [Contributing guide in the documentation](https://www.django-rest-framework.org/community/contributing/) gives some more information on our process and code of conduct.

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Some reasons you might want to use REST framework:
5454

5555
# Requirements
5656

57-
* Python 3.8+
57+
* Python 3.9+
5858
* Django 4.2, 5.0, 5.1, 5.2
5959

6060
We **highly recommend** and only officially support the latest patch release of

docs/api-guide/fields.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ For further examples on `HiddenField` see the [validators](validators.md) docume
552552

553553
---
554554

555-
**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request). This behavior might change in future, follow updates on [github discussion](https://github.com/encode/django-rest-framework/discussions/8259).
555+
**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request).
556556

557557
---
558558

docs/api-guide/throttling.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ You'll need to remember to also set your custom throttle class in the `'DEFAULT_
110110

111111
The built-in throttle implementations are open to [race conditions][race], so under high concurrency they may allow a few extra requests through.
112112

113-
If your project relies on guaranteeing the number of requests during concurrent requests, you will need to implement your own throttle class. See [issue #5181][gh5181] for more details.
113+
If your project relies on guaranteeing the number of requests during concurrent requests, you will need to implement your own throttle class.
114114

115115
---
116116

@@ -220,5 +220,4 @@ The following is an example of a rate throttle, that will randomly throttle 1 in
220220
[identifying-clients]: http://oxpedia.org/wiki/index.php?title=AppSuite:Grizzly#Multiple_Proxies_in_front_of_the_cluster
221221
[cache-setting]: https://docs.djangoproject.com/en/stable/ref/settings/#caches
222222
[cache-docs]: https://docs.djangoproject.com/en/stable/topics/cache/#setting-up-the-cache
223-
[gh5181]: https://github.com/encode/django-rest-framework/issues/5181
224223
[race]: https://en.wikipedia.org/wiki/Race_condition#Data_race

docs/api-guide/validators.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ If you want the date field to be entirely hidden from the user, then use `Hidden
166166

167167
---
168168

169-
**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request). This behavior might change in future, follow updates on [github discussion](https://github.com/encode/django-rest-framework/discussions/8259).
169+
**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request).
170170

171171
---
172172

docs/community/3.16-announcement.md

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<style>
2+
.promo li a {
3+
float: left;
4+
width: 130px;
5+
height: 20px;
6+
text-align: center;
7+
margin: 10px 30px;
8+
padding: 150px 0 0 0;
9+
background-position: 0 50%;
10+
background-size: 130px auto;
11+
background-repeat: no-repeat;
12+
font-size: 120%;
13+
color: black;
14+
}
15+
.promo li {
16+
list-style: none;
17+
}
18+
</style>
19+
20+
# Django REST framework 3.16
21+
22+
At the Internet, on March 28th, 2025, we are happy to announce the release of Django REST framework 3.16.
23+
24+
## Updated Django and Python support
25+
26+
The latest release now fully supports Django 5.1 and the upcoming 5.2 LTS as well as Python 3.13.
27+
28+
The current minimum versions of Django is now 4.2 and Python 3.9.
29+
30+
## Django LoginRequiredMiddleware
31+
32+
The new `LoginRequiredMiddleware` introduced by Django 5.1 can now be used alongside Django REST Framework, however it is not honored for API views as an equivalent behaviour can be configured via `DEFAULT_AUTHENTICATION_CLASSES`. See [our dedicated section](../api-guide/authentication.md#django-51-loginrequiredmiddleware) in the docs for more information.
33+
34+
## Improved support for UniqueConstraint
35+
36+
The generation of validators for [UniqueConstraint](https://docs.djangoproject.com/en/stable/ref/models/constraints/#uniqueconstraint) has been improved to support better nullable fields and constraints with conditions.
37+
38+
## Other fixes and improvements
39+
40+
There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behaviour.
41+
42+
See the [release notes](release-notes.md) page for a complete listing.

docs/community/contributing.md

-18
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
>
55
> &mdash; [Tim Berners-Lee][cite]
66
7-
There are many ways you can contribute to Django REST framework. We'd like it to be a community-led project, so please get involved and help shape the future of the project.
8-
97
!!! note
108

119
At this point in its lifespan we consider Django REST framework to be feature-complete. We focus on pull requests that track the continued development of Django versions, and generally do not accept new features or code formatting changes.
@@ -30,24 +28,9 @@ The [Django code of conduct][code-of-conduct] gives a fuller set of guidelines f
3028

3129
# Issues
3230

33-
Our contribution process is that the [GitHub discussions page](https://github.com/encode/django-rest-framework/discussions) should generally be your starting point. Please only raise an issue or pull request if you've been recommended to do so after discussion.
34-
35-
Some tips on good potential issue reporting:
36-
3731
* Django REST framework is considered feature-complete. Please do not file requests to change behavior, unless it is required for security reasons or to maintain compatibility with upcoming Django or Python versions.
38-
* Search the GitHub project page for related items, and make sure you're running the latest version of REST framework before reporting an issue.
3932
* Feature requests will typically be closed with a recommendation that they be implemented outside the core REST framework library (e.g. as third-party libraries). This approach allows us to keep down the maintenance overhead of REST framework, so that the focus can be on continued stability and great documentation.
4033

41-
## Triaging issues
42-
43-
Getting involved in triaging incoming issues is a good way to start contributing. Every single ticket that comes into the ticket tracker needs to be reviewed in order to determine what the next steps should be. Anyone can help out with this, you just need to be willing to
44-
45-
* Read through the ticket - does it make sense, is it missing any context that would help explain it better?
46-
* Is the ticket reported in the correct place, would it be better suited as a discussion on the discussion group?
47-
* If the ticket is a bug report, can you reproduce it? Are you able to write a failing test case that demonstrates the issue and that can be submitted as a pull request?
48-
* If the ticket is a feature request, could the feature request instead be implemented as a third party package?
49-
* If a ticket hasn't had much activity and addresses something you need, then comment on the ticket and try to find out what's needed to get it moving again.
50-
5134
# Development
5235

5336
To start developing on Django REST framework, first create a Fork from the
@@ -206,7 +189,6 @@ If you want to draw attention to a note or warning, use a pair of enclosing line
206189
[code-of-conduct]: https://www.djangoproject.com/conduct/
207190
[google-group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework
208191
[so-filter]: https://stackexchange.com/filters/66475/rest-framework
209-
[issues]: https://github.com/encode/django-rest-framework/issues?state=open
210192
[pep-8]: https://www.python.org/dev/peps/pep-0008/
211193
[build-status]: ../img/build-status.png
212194
[pull-requests]: https://help.github.com/articles/using-pull-requests

docs/community/project-management.md

-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ Further notes for maintainers:
3434
* Code changes should come in the form of a pull request - do not push directly to master.
3535
* Maintainers should typically not merge their own pull requests.
3636
* Each issue/pull request should have exactly one label once triaged.
37-
* Search for un-triaged issues with [is:open no:label][un-triaged].
3837

3938
---
4039

@@ -157,7 +156,6 @@ The following issues still need to be addressed:
157156
* Document ownership and management of the security mailing list.
158157

159158
[bus-factor]: https://en.wikipedia.org/wiki/Bus_factor
160-
[un-triaged]: https://github.com/encode/django-rest-framework/issues?q=is%3Aopen+no%3Alabel
161159
[transifex-project]: https://www.transifex.com/projects/p/django-rest-framework/
162160
[transifex-client]: https://pypi.org/project/transifex-client/
163161
[translation-memory]: http://docs.transifex.com/guides/tm#let-tm-automatically-populate-translations

docs/community/release-notes.md

+84
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,90 @@ You can determine your currently installed version using `pip show`:
3636

3737
---
3838

39+
## 3.16.x series
40+
41+
### 3.16.0
42+
43+
**Date**: 28th March 2025
44+
45+
This release is considered a significant release to improve upstream support with Django and Python. Some of these may change the behaviour of existing features and pre-existing behaviour. Specifically, some fixes were added to around the support of `UniqueConstraint` with nullable fields which will improve built-in serializer validation.
46+
47+
## Features
48+
49+
* Add official support for Django 5.1 and its new `LoginRequiredMiddleware` in [#9514](https://github.com/encode/django-rest-framework/pull/9514) and [#9657](https://github.com/encode/django-rest-framework/pull/9657)
50+
* Add official Django 5.2a1 support in [#9634](https://github.com/encode/django-rest-framework/pull/9634)
51+
* Add support for Python 3.13 in [#9527](https://github.com/encode/django-rest-framework/pull/9527) and [#9556](https://github.com/encode/django-rest-framework/pull/9556)
52+
* Support Django 2.1+ test client JSON data automatically serialized in [#6511](https://github.com/encode/django-rest-framework/pull/6511) and fix a regression in [#9615](https://github.com/encode/django-rest-framework/pull/9615)
53+
54+
## Bug fixes
55+
56+
* Fix unique together validator to respect condition's fields from `UniqueConstraint` in [#9360](https://github.com/encode/django-rest-framework/pull/9360)
57+
* Fix raising on nullable fields part of `UniqueConstraint` in [#9531](https://github.com/encode/django-rest-framework/pull/9531)
58+
* Fix `unique_together` validation with source in [#9482](https://github.com/encode/django-rest-framework/pull/9482)
59+
* Added protections to `AttributeError` raised within properties in [#9455](https://github.com/encode/django-rest-framework/pull/9455)
60+
* Fix `get_template_context` to handle also lists in [#9467](https://github.com/encode/django-rest-framework/pull/9467)
61+
* Fix "Converter is already registered" deprecation warning. in [#9512](https://github.com/encode/django-rest-framework/pull/9512)
62+
* Fix noisy warning and accept integers as min/max values of `DecimalField` in [#9515](https://github.com/encode/django-rest-framework/pull/9515)
63+
* Fix usages of `open()` in `setup.py` in [#9661](https://github.com/encode/django-rest-framework/pull/9661)
64+
65+
## Translations
66+
67+
* Add some missing Chinese translations in [#9505](https://github.com/encode/django-rest-framework/pull/9505)
68+
* Fix spelling mistakes in Farsi language were corrected in [#9521](https://github.com/encode/django-rest-framework/pull/9521)
69+
* Fixing and adding missing Brazilian Portuguese translations in [#9535](https://github.com/encode/django-rest-framework/pull/9535)
70+
71+
## Removals
72+
73+
* Remove support for Python 3.8 in [#9670](https://github.com/encode/django-rest-framework/pull/9670)
74+
* Remove long deprecated code from request wrapper in [#9441](https://github.com/encode/django-rest-framework/pull/9441)
75+
* Remove deprecated `AutoSchema._get_reference` method in [#9525](https://github.com/encode/django-rest-framework/pull/9525)
76+
77+
## Documentation and internal changes
78+
79+
* Provide tests for hashing of `OperandHolder` in [#9437](https://github.com/encode/django-rest-framework/pull/9437)
80+
* Update documentation: Add `adrf` third party package in [#9198](https://github.com/encode/django-rest-framework/pull/9198)
81+
* Update tutorials links in Community contributions docs in [#9476](https://github.com/encode/django-rest-framework/pull/9476)
82+
* Fix usage of deprecated Django function in example from docs in [#9509](https://github.com/encode/django-rest-framework/pull/9509)
83+
* Move path converter docs into a separate section in [#9524](https://github.com/encode/django-rest-framework/pull/9524)
84+
* Add test covering update view without `queryset` attribute in [#9528](https://github.com/encode/django-rest-framework/pull/9528)
85+
* Fix Transifex link in [#9541](https://github.com/encode/django-rest-framework/pull/9541)
86+
* Fix example `httpie` call in docs in [#9543](https://github.com/encode/django-rest-framework/pull/9543)
87+
* Fix example for serializer field with choices in docs in [#9563](https://github.com/encode/django-rest-framework/pull/9563)
88+
* Remove extra `<>` in validators example in [#9590](https://github.com/encode/django-rest-framework/pull/9590)
89+
* Update `strftime` link in the docs in [#9624](https://github.com/encode/django-rest-framework/pull/9624)
90+
* Switch to codecov GHA in [#9618](https://github.com/encode/django-rest-framework/pull/9618)
91+
* Add note regarding availability of the `action` attribute in 'Introspecting ViewSet actions' docs section in [#9633](https://github.com/encode/django-rest-framework/pull/9633)
92+
* Improved description of allowed throttling rates in documentation in [#9640](https://github.com/encode/django-rest-framework/pull/9640)
93+
* Add `rest-framework-gm2m-relations` package to the list of 3rd party libraries in [#9063](https://github.com/encode/django-rest-framework/pull/9063)
94+
* Fix a number of typos in the test suite in the docs in [#9662](https://github.com/encode/django-rest-framework/pull/9662)
95+
* Add `django-pyoidc` as a third party authentication library in [#9667](https://github.com/encode/django-rest-framework/pull/9667)
96+
97+
## New Contributors
98+
99+
* [`@maerteijn`](https://github.com/maerteijn) made their first contribution in [#9198](https://github.com/encode/django-rest-framework/pull/9198)
100+
* [`@FraCata00`](https://github.com/FraCata00) made their first contribution in [#9444](https://github.com/encode/django-rest-framework/pull/9444)
101+
* [`@AlvaroVega`](https://github.com/AlvaroVega) made their first contribution in [#9451](https://github.com/encode/django-rest-framework/pull/9451)
102+
* [`@james`](https://github.com/james)-mchugh made their first contribution in [#9455](https://github.com/encode/django-rest-framework/pull/9455)
103+
* [`@ifeanyidavid`](https://github.com/ifeanyidavid) made their first contribution in [#9479](https://github.com/encode/django-rest-framework/pull/9479)
104+
* [`@p`](https://github.com/p)-schlickmann made their first contribution in [#9480](https://github.com/encode/django-rest-framework/pull/9480)
105+
* [`@akkuman`](https://github.com/akkuman) made their first contribution in [#9505](https://github.com/encode/django-rest-framework/pull/9505)
106+
* [`@rafaelgramoschi`](https://github.com/rafaelgramoschi) made their first contribution in [#9509](https://github.com/encode/django-rest-framework/pull/9509)
107+
* [`@Sinaatkd`](https://github.com/Sinaatkd) made their first contribution in [#9521](https://github.com/encode/django-rest-framework/pull/9521)
108+
* [`@gtkacz`](https://github.com/gtkacz) made their first contribution in [#9535](https://github.com/encode/django-rest-framework/pull/9535)
109+
* [`@sliverc`](https://github.com/sliverc) made their first contribution in [#9556](https://github.com/encode/django-rest-framework/pull/9556)
110+
* [`@gabrielromagnoli1987`](https://github.com/gabrielromagnoli1987) made their first contribution in [#9543](https://github.com/encode/django-rest-framework/pull/9543)
111+
* [`@cheehong1030`](https://github.com/cheehong1030) made their first contribution in [#9563](https://github.com/encode/django-rest-framework/pull/9563)
112+
* [`@amansharma612`](https://github.com/amansharma612) made their first contribution in [#9590](https://github.com/encode/django-rest-framework/pull/9590)
113+
* [`@Gluroda`](https://github.com/Gluroda) made their first contribution in [#9616](https://github.com/encode/django-rest-framework/pull/9616)
114+
* [`@deepakangadi`](https://github.com/deepakangadi) made their first contribution in [#9624](https://github.com/encode/django-rest-framework/pull/9624)
115+
* [`@EXG1O`](https://github.com/EXG1O) made their first contribution in [#9633](https://github.com/encode/django-rest-framework/pull/9633)
116+
* [`@decadenza`](https://github.com/decadenza) made their first contribution in [#9640](https://github.com/encode/django-rest-framework/pull/9640)
117+
* [`@mojtabaakbari221b`](https://github.com/mojtabaakbari221b) made their first contribution in [#9063](https://github.com/encode/django-rest-framework/pull/9063)
118+
* [`@mikemanger`](https://github.com/mikemanger) made their first contribution in [#9661](https://github.com/encode/django-rest-framework/pull/9661)
119+
* [`@gbip`](https://github.com/gbip) made their first contribution in [#9667](https://github.com/encode/django-rest-framework/pull/9667)
120+
121+
**Full Changelog**: https://github.com/encode/django-rest-framework/compare/3.15.2...3.16.0
122+
39123
## 3.15.x series
40124

41125
### 3.15.2

0 commit comments

Comments
 (0)