Fix model fields not being omitted on output/serialization #5473
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
The documentation says about a field's
required
argument:But this isn't the case for Django ORM model instances because they always return at least the field default so there's never an
AttributeError
. This means that DRF's logic for omitting fields is never triggered and all model fields are always present in the JSON representation regardless of the field'srequired
argument.This PR fixes that by conditionally checking against the model field's default when the instance is a Django ORM model instance only when DRF's omit logic would take effect and forcing an
AttributeError
in those cases. There's full test coverage for all the code this PR touches and there are no tox errors that I didn't also see when runagainstencode/master
.http://www.django-rest-framework.org/api-guide/fields/#required