### Documentation search

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

## Deprecations

### `serializers.NullBooleanField`

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