Django REST framework 3.14

Django 4.1 support

The latest release now fully supports Django 4.1, and drops support for Django 2.2.

Our requirements are now:

  • Python 3.6+
  • Django 4.1, 4.0, 3.2, 3.1, 3.0

raise_exception argument for is_valid is now keyword-only.

Calling serializer_instance.is_valid(True) is no longer acceptable syntax. If you'd like to use the raise_exception argument, you must use it as a keyword argument.

See Pull Request #7952 for more details.

ManyRelatedField supports returning the default when the source attribute doesn't exist.

Previously, if you used a serializer field with many=True with a dot notated source field that didn't exist, it would raise an AttributeError. Now it will return the default or be skipped depending on the other arguments.

See Pull Request #7574 for more details.

Make Open API get_reference public.

Returns a reference to the serializer component. This may be useful if you override get_schema().

Change semantic of OR of two permission classes.

When OR-ing two permissions, the request has to pass either class's has_permission() and has_object_permission().

Previously, both class's has_permission() was ignored when OR-ing two permissions together.

See Pull Request #7522 for more details.

Minor fixes and improvements

There are a number of minor fixes and improvements in this release. See the release notes page for a complete listing.



serializers.NullBooleanField was moved to pending deprecation in 3.12, and deprecated in 3.13. It has now been removed from the core framework.

Instead use serializers.BooleanField field and set allow_null=True which does the same thing.