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
At the Internet, on March 15th, 2024, with 176 commits by 138 authors, we are happy to announce the release of Django REST framework 3.15.
23
+
24
+
## Django 5.0 and Python 3.12 support
25
+
26
+
The latest release now fully supports Django 5.0 and Python 3.12.
27
+
28
+
The current minimum versions of Django still is 3.0 and Python 3.6.
29
+
30
+
## Primary Support of UniqueConstraint
31
+
32
+
`ModelSerializer` generates validators for [UniqueConstraint](https://docs.djangoproject.com/en/4.0/ref/models/constraints/#uniqueconstraint) (both UniqueValidator and UniqueTogetherValidator)
33
+
34
+
## ValidationErrors improvements
35
+
36
+
The `ValidationError` has been aligned with Django's, currently supporting the same style (signature) and nesting.
37
+
38
+
## SimpleRouter non-regex matching support
39
+
40
+
By default the URLs created by `SimpleRouter` use regular expressions. This behavior can be modified by setting the `use_regex_path` argument to `False` when instantiating the router.
41
+
42
+
## ZoneInfo as the primary source of timezone data
43
+
44
+
Dependency on pytz has been removed and deprecation warnings have been added, Django will provide ZoneInfo instances as long as USE_DEPRECATED_PYTZ is not enabled. More info on the migration can be found [in this guide](https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html).
45
+
46
+
## Align `SearchFilter` behaviour to `django.contrib.admin` search
47
+
48
+
Searches now may contain _quoted phrases_ with spaces, each phrase is considered as a single search term, and it will raise a validation error if any null-character is provided in search. See the [Filtering API guide](../api-guide/filtering.md) for more information.
49
+
50
+
## Default values propagation
51
+
52
+
Model fields' default values are now propagated to serializer fields, for more information see the [Serializer fields API guide](../api-guide/fields.md#default).
53
+
54
+
## Other fixes and improvements
55
+
56
+
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.
57
+
58
+
See the [release notes](release-notes.md) page for a complete listing.
Copy file name to clipboardExpand all lines: docs/community/release-notes.md
+85-1Lines changed: 85 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -34,6 +34,90 @@ You can determine your currently installed version using `pip show`:
34
34
35
35
---
36
36
37
+
## 3.15.x series
38
+
39
+
### 3.15.0
40
+
41
+
Date: 15th March 2024
42
+
43
+
* Django 5.0 and Python 3.12 support [[#9157](https://github.com/encode/django-rest-framework/pull/9157)]
44
+
* Use POST method instead of GET to perform logout in browsable API [[9208](https://github.com/encode/django-rest-framework/pull/9208)]
45
+
* Added jQuery 3.7.1 support & dropped previous version [[#9094](https://github.com/encode/django-rest-framework/pull/9094)]
46
+
* Use str as default path converter [[#9066](https://github.com/encode/django-rest-framework/pull/9066)]
47
+
* Document support for http.HTTPMethod in the @action decorator added in Python 3.11 [[#9067](https://github.com/encode/django-rest-framework/pull/9067)]
* Warn about Decimal type in min_value and max_value arguments of DecimalField [[#8972](https://github.com/encode/django-rest-framework/pull/8972)]
68
+
* Fix mapping for choice values [[#8968](https://github.com/encode/django-rest-framework/pull/8968)]
69
+
* Refactor read function to use context manager for file handling [[#8967](https://github.com/encode/django-rest-framework/pull/8967)]
70
+
* Fix: fallback on CursorPagination ordering if unset on the view [[#8954](https://github.com/encode/django-rest-framework/pull/8954)]
71
+
* Replaced `OrderedDict` with `dict`[[#8964](https://github.com/encode/django-rest-framework/pull/8964)]
72
+
* Refactor get_field_info method to include max_digits and decimal_places attributes in SimpleMetadata class [[#8943](https://github.com/encode/django-rest-framework/pull/8943)]
73
+
* Implement `__eq__` for validators [[#8925](https://github.com/encode/django-rest-framework/pull/8925)]
74
+
* Ensure CursorPagination respects nulls in the ordering field [[#8912](https://github.com/encode/django-rest-framework/pull/8912)]
75
+
* Use ZoneInfo as primary source of timezone data [[#8924](https://github.com/encode/django-rest-framework/pull/8924)]
76
+
* Add username search field for TokenAdmin (#8927) [[#8934](https://github.com/encode/django-rest-framework/pull/8934)]
77
+
* Handle Nested Relation in SlugRelatedField when many=False [[#8922](https://github.com/encode/django-rest-framework/pull/8922)]
78
+
* Bump version of jQuery to 3.6.4 & updated ref links [[#8909](https://github.com/encode/django-rest-framework/pull/8909)]
79
+
* Support UniqueConstraint [[#7438](https://github.com/encode/django-rest-framework/pull/7438)]
80
+
* Allow Request, Response, Field, and GenericAPIView to be subscriptable. This allows the classes to be made generic for type checking. [[#8825](https://github.com/encode/django-rest-framework/pull/8825)]
81
+
* Feat: Add some changes to ValidationError to support django style validation errors [[#8863](https://github.com/encode/django-rest-framework/pull/8863)]
82
+
* Fix Respect `can_read_model` permission in DjangoModelPermissions [[#8009](https://github.com/encode/django-rest-framework/pull/8009)]
* Handle Django's ValidationErrors in ListField [[#6423](https://github.com/encode/django-rest-framework/pull/6423)]
91
+
* Remove a bit of inline CSS. Add CSP nonce where it might be required and is available [[#8783](https://github.com/encode/django-rest-framework/pull/8783)]
92
+
* Use autocomplete widget for user selection in Token admin [[#8534](https://github.com/encode/django-rest-framework/pull/8534)]
93
+
* Make browsable API compatible with strong CSP [[#8784](https://github.com/encode/django-rest-framework/pull/8784)]
94
+
* Avoid inline script execution for injecting CSRF token [[#7016](https://github.com/encode/django-rest-framework/pull/7016)]
95
+
* Mitigate global dependency on inflection [[#8017](https://github.com/encode/django-rest-framework/pull/8017)][[#8781](https://github.com/encode/django-rest-framework/pull/8781)]
* Implemented Verbose Name Translation for TokenProxy [[#8713](https://github.com/encode/django-rest-framework/pull/8713)]
98
+
* Properly handle OverflowError in DurationField deserialization [[#8042](https://github.com/encode/django-rest-framework/pull/8042)]
99
+
* Fix OpenAPI operation name plural appropriately [[#8017](https://github.com/encode/django-rest-framework/pull/8017)]
100
+
* Represent SafeString as plain string on schema rendering [[#8429](https://github.com/encode/django-rest-framework/pull/8429)]
101
+
* Fix #8771 - Checking for authentication even if `_ignore_model_permissions = True`[[#8772](https://github.com/encode/django-rest-framework/pull/8772)]
102
+
* Fix 404 when page query parameter is empty string [[#8578](https://github.com/encode/django-rest-framework/pull/8578)]
103
+
* Fixes instance check in ListSerializer.to_representation [[#8726](https://github.com/encode/django-rest-framework/pull/8726)][[#8727](https://github.com/encode/django-rest-framework/pull/8727)]
104
+
* FloatField will crash if the input is a number that is too big [[#8725](https://github.com/encode/django-rest-framework/pull/8725)]
105
+
* Add missing DurationField to SimpleMetada label_lookup [[#8702](https://github.com/encode/django-rest-framework/pull/8702)]
106
+
* Add support for Python 3.11 [[#8752](https://github.com/encode/django-rest-framework/pull/8752)]
107
+
* Make request consistently available in pagination classes [[#8764](https://github.com/encode/django-rest-framework/pull/9764)]
108
+
* Possibility to remove trailing zeros on DecimalFields representation [[#6514](https://github.com/encode/django-rest-framework/pull/6514)]
109
+
* Add a method for getting serializer field name (OpenAPI) [[#7493](https://github.com/encode/django-rest-framework/pull/7493)]
110
+
* Add `__eq__` method for `OperandHolder` class [[#8710](https://github.com/encode/django-rest-framework/pull/8710)]
111
+
* Avoid importing `django.test` package when not testing [[#8699](https://github.com/encode/django-rest-framework/pull/8699)]
112
+
* Preserve exception messages for wrapped Django exceptions [[#8051](https://github.com/encode/django-rest-framework/pull/8051)]
113
+
* Include `examples` and `format` to OpenAPI schema of CursorPagination [[#8687](https://github.com/encode/django-rest-framework/pull/8687)][[#8686](https://github.com/encode/django-rest-framework/pull/8686)]
114
+
* Fix infinite recursion with deepcopy on Request [[#8684](https://github.com/encode/django-rest-framework/pull/8684)]
115
+
* Refactor: Replace try/except with contextlib.suppress() [[#8676](https://github.com/encode/django-rest-framework/pull/8676)]
116
+
* Minor fix to SerializeMethodField docstring [[#8629](https://github.com/encode/django-rest-framework/pull/8629)]
117
+
* Minor refactor: Unnecessary use of list() function [[#8672](https://github.com/encode/django-rest-framework/pull/8672)]
118
+
* Unnecessary list comprehension [[#8670](https://github.com/encode/django-rest-framework/pull/8670)]
119
+
* Use correct class to indicate present deprecation [[#8665](https://github.com/encode/django-rest-framework/pull/8665)]
120
+
37
121
## 3.14.x series
38
122
39
123
### 3.14.0
@@ -946,7 +1030,7 @@ See the [release announcement][3.6-release].
946
1030
* description.py codes and tests removal. ([#4153][gh4153])
947
1031
* Wrap guardian.VERSION in tuple. ([#4149][gh4149])
948
1032
* Refine validator for fields with <source=> kwargs. ([#4146][gh4146])
949
-
* Fix None values representation in childs of ListField, DictField. ([#4118][gh4118])
1033
+
* Fix None values representation in children of ListField, DictField. ([#4118][gh4118])
950
1034
* Resolve TimeField representation for midnight value. ([#4107][gh4107])
951
1035
* Set proper status code in AdminRenderer for the redirection after POST/DELETE requests. ([#4106][gh4106])
952
1036
* TimeField render returns None instead of 00:00:00. ([#4105][gh4105])
Because we're using viewsets instead of views, we can automatically generate the URL conf for our API, by simply registering the viewsets with a router class.
0 commit comments