Skip to content

Initial Release Notes for 3.15 #8794

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
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions docs/community/3.15-announcement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<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.15

At the Internet, on September 14th, 2023, with 135 commits 107 authors, we are happy to announce the release of Django REST framework 3.15.

## Django 4.2 and Python 3.11 support

The latest release now fully supports Django 4.2 and Python 3.11.

The current minimum versions of Django still is 3.0 and Python 3.6.

## Primary Support of UniqueConstraint

`ModelSerializer` generates validators for [UniqueConstraint](https://docs.djangoproject.com/en/4.0/ref/models/constraints/#uniqueconstraint) (both UniqueValidator and UniqueTogetherValidator)

## ValidationErrors improvements

The `ValidationError` has been aligned with Django's, currently supporting the same style (signature) and nesting.

## SimpleRouter non-regex matching support

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.

## ZoneInfo as the primary source of timezone data

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).

## Align `SearchFilter` behaviour to `django.contrib.admin` search

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.

## Default values propagation

Model fields' default values are now propagated to serializer fields, for more information see the [Serializer fields API guide](../api-guide/fields.md#default).

## Other fixes and improvements

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.

See the [release notes](release-notes.md) page for a complete listing.
136 changes: 136 additions & 0 deletions docs/community/release-notes.md
Original file line number Diff line number Diff line change
@@ -34,6 +34,142 @@ You can determine your currently installed version using `pip show`:

---

## 3.15.x series

### 3.15.0

Date: ...

* Added jQuery 3.7.1 support & dropped previous version [[#9094](https://github.com/encode/django-rest-framework/pull/9094)]
* Update CONTRIBUTING.md [[#9095](https://github.com/encode/django-rest-framework/pull/9095)]
* Fix documentation link test [[#9076](https://github.com/encode/django-rest-framework/pull/9076)]
* Use str as default path converter [[#9066](https://github.com/encode/django-rest-framework/pull/9066)]
* Update third-party-packages.md [[#9026](https://github.com/encode/django-rest-framework/pull/9026)]
* Document support for http.HTTPMethod in the @action decorator added in Python 3.11 [[#9067](https://github.com/encode/django-rest-framework/pull/9067)]
* Add note for HiddenField behavior [[#9055](https://github.com/encode/django-rest-framework/pull/9055)]
* Add docs validation to release process [[#6967](https://github.com/encode/django-rest-framework/pull/6967)]
* Update exceptions.md [[#9071](https://github.com/encode/django-rest-framework/pull/9071)]
* Partial serializer should not have required fields [[#7563](https://github.com/encode/django-rest-framework/pull/7563)]
* Propagate 'default' from model field to serializer field. [[#9030](https://github.com/encode/django-rest-framework/pull/9030)]
* Allow to override child.run_validation call in ListSerializer [[#8035](https://github.com/encode/django-rest-framework/pull/8035)]
* Align SearchFilter behaviour to django.contrib.admin search [[#9017](https://github.com/encode/django-rest-framework/pull/9017)]
* Class name added to unkown field error [[#9019](https://github.com/encode/django-rest-framework/pull/9019)]
* Fix: Pagination response schemas. [[#9049](https://github.com/encode/django-rest-framework/pull/9049)]
* Fix choices in ChoiceField to support IntEnum [[#8955](https://github.com/encode/django-rest-framework/pull/8955)]
* Fix `SearchFilter` rendering search field with invalid value [[#9023](https://github.com/encode/django-rest-framework/pull/9023)]
* Fix OpenAPI Schema yaml rendering for `timedelta` [[#9007](https://github.com/encode/django-rest-framework/pull/9007)]
* Fix `NamespaceVersioning` ignoring `DEFAULT_VERSION` on non-None namespaces [[#7278](https://github.com/encode/django-rest-framework/pull/7278)]
* Added Deprecation Warnings for CoreAPI [[#7519](https://github.com/encode/django-rest-framework/pull/7519)]
* Removed usage of `field.choices` that triggered full table load [[#8950](https://github.com/encode/django-rest-framework/pull/8950)]
* Permit mixed casing of string values for `BooleanField` validation [[#8970](https://github.com/encode/django-rest-framework/pull/8970)]
* Fixes `BrowsableAPIRenderer` for usage with `ListSerializer`. [[#7530](https://github.com/encode/django-rest-framework/pull/7530)]
* Change semantic of `OR` of two permission classes [[#7522](https://github.com/encode/django-rest-framework/pull/7522)]
* Remove dependency on `pytz` [[#8984](https://github.com/encode/django-rest-framework/pull/8984)]
* Add NullBooleanField deprecation to docs [[#8999](https://github.com/encode/django-rest-framework/pull/8999)]
* Fix example of `requires_context` attribute [[#8952](https://github.com/encode/django-rest-framework/pull/8952)]
* Fix validation for ListSerializer [[#8979](https://github.com/encode/django-rest-framework/pull/8979)]
* Make set_value a method within `Serializer` [[#8001](https://github.com/encode/django-rest-framework/pull/8001)]
* Fix URLPathVersioning reverse fallback [[#7247](https://github.com/encode/django-rest-framework/pull/7247)]
* Fix Links in Documentation to Django `reverse` and `reverse_lazy` [[#8986](https://github.com/encode/django-rest-framework/pull/8986)]
* Declared Django 4.2 support in README.md [[#8985](https://github.com/encode/django-rest-framework/pull/8985)]
* Remove django 2.2 from docs index [[#8982](https://github.com/encode/django-rest-framework/pull/8982)]
* Warn about Decimal type in min_value and max_value arguments of DecimalField [[#8972](https://github.com/encode/django-rest-framework/pull/8972)]
* Fix mapping for choice values [[#8968](https://github.com/encode/django-rest-framework/pull/8968)]
* Refactor read function to use context manager for file handling [[#8967](https://github.com/encode/django-rest-framework/pull/8967)]
* Fix: fallback on CursorPagination ordering if unset on the view [[#8954](https://github.com/encode/django-rest-framework/pull/8954)]
* Replaced `OrderedDict` with `dict` [[#8964](https://github.com/encode/django-rest-framework/pull/8964)]
* 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)]
* Implement `__eq__` for validators [[#8925](https://github.com/encode/django-rest-framework/pull/8925)]
* Ensure CursorPagination respects nulls in the ordering field [[#8912](https://github.com/encode/django-rest-framework/pull/8912)]
* Use ZoneInfo as primary source of timezone data [[#8924](https://github.com/encode/django-rest-framework/pull/8924)]
* Add username search field for TokenAdmin (#8927) [[#8934](https://github.com/encode/django-rest-framework/pull/8934)]
* Handle Nested Relation in SlugRelatedField when many=False [[#8922](https://github.com/encode/django-rest-framework/pull/8922)]
* Docs: Fix authentication / authorization mixup [[#8930](https://github.com/encode/django-rest-framework/pull/8930)]
* Use consistent spelling for "authorization" [[#8929](https://github.com/encode/django-rest-framework/pull/8929)]
* Test django 4.2 stable release [[#8932](https://github.com/encode/django-rest-framework/pull/8932)]
* Update requirements-packaging.txt [[#8921](https://github.com/encode/django-rest-framework/pull/8921)]
* Update tox with django 4.2rc1 [[#8920](https://github.com/encode/django-rest-framework/pull/8920)]
* Bump version of jQuery to 3.6.4 & updated ref links [[#8909](https://github.com/encode/django-rest-framework/pull/8909)]
* Minor documentation improvements and fixes [[#8903](https://github.com/encode/django-rest-framework/pull/8903)]
* Support UniqueConstraint [[#7438](https://github.com/encode/django-rest-framework/pull/7438)]
* Test django 4.2b1 [[#8892](https://github.com/encode/django-rest-framework/pull/8892)]
* Docs: add missing renderer import in tutorial 6 [[#8885](https://github.com/encode/django-rest-framework/pull/8885)]
* 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)]
* Upgrade isort version in pre-commit [[#8882](https://github.com/encode/django-rest-framework/pull/8882)]
* Docs: fix code example [[#8880](https://github.com/encode/django-rest-framework/pull/8880)]
* Feat: Add some changes to ValidationError to support django style vadation errors [[#8863](https://github.com/encode/django-rest-framework/pull/8863)]
* Inherit from faked classes in tests to satisfy mypy [[#8859](https://github.com/encode/django-rest-framework/pull/8859)]
* Initial django 4.2a1 testing [[#8846](https://github.com/encode/django-rest-framework/pull/8846)]
* Fix Respect `can_read_model` permission in DjangoModelPermissions [[#8009](https://github.com/encode/django-rest-framework/pull/8009)]
* Add SimplePathRouter [[#6789](https://github.com/encode/django-rest-framework/pull/6789)]
* Re-prefetch related objects after updating [[#8043](https://github.com/encode/django-rest-framework/pull/8043)]
* Update documentation regarding arguments of ValidationError [[#8807](https://github.com/encode/django-rest-framework/pull/8807)]
* Fix FilePathField required argument [[#8805](https://github.com/encode/django-rest-framework/pull/8805)]
* Update docs to maintained `djangorestframework-guardian2` [[#8817](https://github.com/encode/django-rest-framework/pull/8817)]
* Revert "Fix bug in validators documentation (#8779)" [[#8811](https://github.com/encode/django-rest-framework/pull/8811)]
* Try update django-filter==22.1 [[#8813](https://github.com/encode/django-rest-framework/pull/8813)]
* Upddate setup python action to v4 [[#8806](https://github.com/encode/django-rest-framework/pull/8806)]
* attrs==22.1.0 [[#8828](https://github.com/encode/django-rest-framework/pull/8828)]
* Fix transifex-client version in packaging requirements. [[#8827](https://github.com/encode/django-rest-framework/pull/8827)]
* Raise ImproperlyConfigured exception if `basename` is not unique [[#8438](https://github.com/encode/django-rest-framework/pull/8438)]
* Use PrimaryKeyRelatedField pkfield in openapi [[#8315](https://github.com/encode/django-rest-framework/pull/8315)]
* Upgrade to tox 4 [[#8795](https://github.com/encode/django-rest-framework/pull/8795)]
* replace partition with split in BasicAuthentication [[#8790](https://github.com/encode/django-rest-framework/pull/8790)]
* Fix BooleanField's allow_null behavior [[#8614](https://github.com/encode/django-rest-framework/pull/8614)]
* Handle Django's ValidationErrors in ListField [[#6423](https://github.com/encode/django-rest-framework/pull/6423)]
* 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)]
* Use autocomplete widget for user selection in Token admin [[#8534](https://github.com/encode/django-rest-framework/pull/8534)]
* Fix bug in validators documentation [[#8779](https://github.com/encode/django-rest-framework/pull/8779)]
* Make browsable API compatbile with strong CSP [[#8784](https://github.com/encode/django-rest-framework/pull/8784)]
* Avoid inline script execution for injecting CSRF token [[#7016](https://github.com/encode/django-rest-framework/pull/7016)]
* Remove Core API mentions from docs [[#8017](https://github.com/encode/django-rest-framework/pull/8017)]
* Mitigate global dependency on inflection #8017 [[#8017](https://github.com/encode/django-rest-framework/pull/8017)] [[#8781](https://github.com/encode/django-rest-framework/pull/8781)]
* Register Django urls [[#8778](https://github.com/encode/django-rest-framework/pull/8778)]
* Implemented Verbose Name Translation for TokenProxy [[#8713](https://github.com/encode/django-rest-framework/pull/8713)]
* Properly handle OverflowError in DurationField deserialization [[#8042](https://github.com/encode/django-rest-framework/pull/8042)]
* Fix OpenAPI operation name plural appropriately [[#8017](https://github.com/encode/django-rest-framework/pull/8017)]
* Represent SafeString as plain string on schema rendering [[#8429](https://github.com/encode/django-rest-framework/pull/8429)]
* Fix #8771 - Checking for authentication even if `_ignore_model_permissions = True` [[#8772](https://github.com/encode/django-rest-framework/pull/8772)]
* Update schema generation doc & add deprecation notice [[#8773](https://github.com/encode/django-rest-framework/pull/8773)]
* Update 6-viewsets-and-routers.md [[#8590](https://github.com/encode/django-rest-framework/pull/8590)]
* Added pagination settings test case [[#8326](https://github.com/encode/django-rest-framework/pull/8326)]
* Fix 404 when page query parameter is empty string [[#8578](https://github.com/encode/django-rest-framework/pull/8578)]
* 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)]
* FloatField will crash if the input is a number that is too big [[#8725](https://github.com/encode/django-rest-framework/pull/8725)]
* Add missing DurationField to SimpleMetada label_lookup [[#8702](https://github.com/encode/django-rest-framework/pull/8702)]
* converted assertion to pytest style in test status [[#8662](https://github.com/encode/django-rest-framework/pull/8662)]
* Fix #8751 - Add support to Python 3.11 [[#8752](https://github.com/encode/django-rest-framework/pull/875)]
* update minimum version to psycopg2-binary>=2.9.5 [[#8767](https://github.com/encode/django-rest-framework/pull/8767)]
* pytest versions update [[#8745](https://github.com/encode/django-rest-framework/pull/8745)]
* Add 3rd party entry for rest-framework-roles [[#8755](https://github.com/encode/django-rest-framework/pull/8755)]
* Added http 102, 103, 421, and 425 status codes in documentation [[#8763](https://github.com/encode/django-rest-framework/pull/8763)]
* Make request consistently available in pagination classes [[#8764](https://github.com/encode/django-rest-framework/pull/9764)]
* Possibility to remove trailing zeros on DecimalFields representation [[#6514](https://github.com/encode/django-rest-framework/pull/6514)]
* Fix Pytest's deprecation warnings about nose usage [[#8758](https://github.com/encode/django-rest-framework/pull/8758)]
* Remove extraneous word "Both" [[#8740](https://github.com/encode/django-rest-framework/pull/8740)]
* Update jobs.md [[#8737](https://github.com/encode/django-rest-framework/pull/8737)]
* Update quickstart.md [[#8575](https://github.com/encode/django-rest-framework/pull/8575)]
* Improve style, fix some typos [[#8405](https://github.com/encode/django-rest-framework/pull/8405)]
* Fixes typo [[#8719](https://github.com/encode/django-rest-framework/pull/8719)]
* Add a method for getting serializer field name (OpenAPI) [[#7493](https://github.com/encode/django-rest-framework/pull/7493)]
* Add `__eq__` method for `OperandHolder` class [[#8710](https://github.com/encode/django-rest-framework/pull/8710)]
* Update schemas.md [[#8707](https://github.com/encode/django-rest-framework/pull/8707)]
* Avoid importing `django.test` package when not testing [[#8699](https://github.com/encode/django-rest-framework/pull/8699)]
* Docs: use `asterisk` for unordered list [[#8697](https://github.com/encode/django-rest-framework/pull/8697)]
* Docs: Convert all tabs into spaces [[#8692](https://github.com/encode/django-rest-framework/pull/8692)]
* Preserve exception messages for wrapped Django exceptions [[#8051](https://github.com/encode/django-rest-framework/pull/8051)]
* Added examples to schema of CursorPagination [[#8687] (https://github.com/encode/django-rest-framework/pull/8687)] [[#8686](https://github.com/encode/django-rest-framework/pull/8686)]
* Fix infinite recursion with deepcopy on Request [[#8684](https://github.com/encode/django-rest-framework/pull/8684)]
* Refactor: Replace try/except with contextlib.suppress() [[#8676](https://github.com/encode/django-rest-framework/pull/8676)]
* Docs: Updated browsable-api.md [[#8678](https://github.com/encode/django-rest-framework/pull/8678)]
* Add spaces to router example in 6-viewsets-and-routers.md [[#8448](https://github.com/encode/django-rest-framework/pull/8448)]
* Update requirements-testing.txt [[#8680](https://github.com/encode/django-rest-framework/pull/8680)]
* Minor fix to SerializeMethodField docstring [[#8629](https://github.com/encode/django-rest-framework/pull/8629)]
* Minor refactor: Unnecessary use of list() function [[#8672](https://github.com/encode/django-rest-framework/pull/8672)]
* Update documentation on dependency installation [[#8566](https://github.com/encode/django-rest-framework/pull/8566)]
* Unnecessary list comprehension [[#8670](https://github.com/encode/django-rest-framework/pull/8670)]
* Use correct class to indicate present deprecation [[#8665](https://github.com/encode/django-rest-framework/pull/8665)]

## 3.14.x series

### 3.14.0
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
@@ -65,6 +65,7 @@ nav:
- 'Contributing to REST framework': 'community/contributing.md'
- 'Project management': 'community/project-management.md'
- 'Release Notes': 'community/release-notes.md'
- '3.15 Announcement': 'community/3.15-announcement.md'
- '3.14 Announcement': 'community/3.14-announcement.md'
- '3.13 Announcement': 'community/3.13-announcement.md'
- '3.12 Announcement': 'community/3.12-announcement.md'