Web APIs for Django. 🎸
Breaking Change: Alter read_only
plus default
behaviour. #5886
read_only
fields will now always be excluded from writable fields.
Previously read_only
fields with a default
value would use the default
for create and update operations.
In order to maintain the old behaviour you may need to pass the value of read_only
fields when calling save()
in
the view:
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
Alternatively you may override save()
or create()
or update()
on the serialiser as appropriate.
Correct allow_null behaviour when required=False #5888
Without an explicit default
, allow_null
implies a default of null
for outgoing serialisation. Previously such
fields were being skipped when read-only or otherwise not required.
Possible backwards compatibility break if you were relying on such fields being excluded from the outgoing
representation. In order to restore the old behaviour you can override data
to exclude the field when None
.
For example:
@property
def data(self):
"""
Drop `maybe_none` field if None.
"""
data = super().data()
if 'maybe_none' in data and data['maybe_none'] is None:
del data['maybe_none']
return data
Refactor dynamic route generation and improve viewset action introspectibility. #5705
ViewSet
s have been provided with new attributes and methods that allow
it to introspect its set of actions and the details of the current action.
list_route
and detail_route
into a single action
decorator.ViewSet
with .get_extra_actions()
.url_name
and url_path
on the decorated method..reverse_action()
method (added in 3.7.4)self.reverse_action(self.custom_action.url_name)
detail
initkwarg to indicate if the current action is operating on a
collection or a single instance.Additional changes:
list_route
& detail_route
in favor of action
decorator with detail
boolean.DynamicRoute
with detail
boolean.Fix formatting of the 3.7.4 release note #5704
Docs: Update DRF Writable Nested Serializers references #5711
Docs: Fixed typo in auth URLs example. #5713
Improve composite field child errors #5655
Disable HTML inputs for dict/list fields #5702
Fix typo in HostNameVersioning doc #5709
Use rsplit to get module and classname for imports #5712
Formalize URLPatternsTestCase #5703
Add exception translation test #5700
Test staticfiles #5701
Add drf-yasg to documentation and schema 3rd party packages #5720
Remove unused compat._resolve_model()
#5733
Drop compat workaround for unsupported Python 3.2 #5734
Prefer iter(dict)
over iter(dict.keys())
#5736
Pass python_requires
argument to setuptools #5739
Remove unused links from docs #5735
Prefer https protocol for links in docs when available #5729
Add HStoreField, postgres fields tests #5654
Always fully qualify ValidationError in docs #5751
Remove unreachable code from ManualSchema #5766
Allowed customising API documentation code samples #5752
Updated docs to use pip show
#5757
Load 'static' instead of 'staticfiles' in templates #5773
Fixed a typo in fields
docs #5783
Refer to "NamespaceVersioning" instead of "NamespacedVersioning" in the documentation #5754
ErrorDetail: add __eq__
/__ne__
and __repr__
#5787
Replace background-attachment: fixed
in docs #5777
Make 404 & 403 responses consistent with exceptions.APIException
output #5763
Small fix to API documentation: schemas #5796
Fix schema generation for PrimaryKeyRelatedField #5764
Represent serializer DictField as an Object in schema #5765
Added docs example reimplementing ObtainAuthToken #5802
Add schema to the ObtainAuthToken view #5676
Fix request formdata handling #5800
Fix authtoken views imports #5818
Update pytest, isort #5815 #5817 #5894
Fixed active timezone handling for non ISO8601 datetimes. #5833
Made TemplateHTMLRenderer render IntegerField inputs when value is 0
. #5834
Corrected endpoint in tutorial instructions #5835
Add Django Rest Framework Role Filters to Third party packages #5809
Use single copy of static assets. Update jQuery #5823
Changes ternary conditionals to be PEP308 compliant #5827
Added links to 'A Todo List API with React' and 'Blog API' tutorials #5837
Fix comment typo in ModelSerializer #5844
Add admin to installed apps to avoid test failures. #5870
Fixed schema for UUIDField in SimpleMetadata. #5872
Corrected docs on router include with namespaces. #5843
Test using model objects for dotted source default #5880
Allow traversing nullable related fields #5849
Added: Tutorial: Django REST with React (Django 2.0) #5891
Add LimitOffsetPagination.get_count
to allow method override #5846
Don't show hidden fields in metadata #5854
Enable OrderingFilter to handle an empty tuple (or list) for the 'ordering' field. #5899
Added generic 500 and 400 JSON error handlers. #5904
Point release for 3.7.x
Note: 3.7.5-3.7.7 fixed packaging issues introduced by changes in 3.7.4. That's it. Use 3.7.7.
Point Release for 3.7.x series.
Schema: Extract method for manual_fields
processing #5633
Allows for easier customisation of manual_fields
processing, for example
to provide per-method manual fields. AutoSchema
adds get_manual_fields
,
as the intended override point, and a utility method update_fields
, to
handle by-name field replacement from a list, which, in general, you are not
expected to override.
Note: AutoSchema.__init__
now ensures manual_fields
is a list.
Previously may have been stored internally as None
.
Remove ulrparse compatability shim; use six instead #5579
Drop compat wrapper for TimeDelta.total_seconds()
#5577
Clean up all whitespace throughout project #5578
Compat cleanup #5581
Add pygments CSS block in browsable API views #5584 #5587
Remove set_rollback()
from compat #5591
Fix request body/POST access #5590
Rename test to reference correct issue #5610
Documentation Fixes #5611 #5612
Remove references to unsupported Django versions in docs and code #5602
Test Serializer exclude for declared fields #5599
Fixed schema generation for filter backends #5613
Minor cleanup for ModelSerializer tests #5598
Reimplement request attribute access w/ __getattr__
#5617
Fixed SchemaJSRenderer renders invalid Javascript #5607
Make Django 2.0 support official/explicit #5619
Perform type check on passed request argument #5618
Fix AttributeError hiding on request authenticators #5600
Update test requirements #5626
Docs: Serializer._declared_fields
enable modifying fields on a serializer #5629
Fix packaging #5624
Fix readme rendering for PyPI, add readme build to CI #5625
Update tutorial #5622
Non-required fields with allow_null=True
should not imply a default value #5639
Docs: Add allow_null
serialization output note #5641
Update to use the Django 2.0 release in tox.ini #5645
Fix Serializer.data
for Browsable API rendering when provided invalid data
#5646
Docs: Note AutoSchema limitations on bare APIView #5649
Add .basename
and .reverse_action()
to ViewSet #5648
Docs: Fix typos in serializers documentation #5652
Fix override_settings
compat #5668
Add DEFAULT_SCHEMA_CLASS setting #5658
Add docs note re generated BooleanField being required=False
#5665
Add 'dist' build #5656
Fix typo in docstring #5678
Docs: Add UNAUTHENTICATED_USER = None
note #5679
Update OPTIONS example from “Documenting Your API” #5680
Docs: Add note on object permissions for FBVs #5681
Docs: Add example to to_representation
docs #5682
Add link to Classy DRF in docs #5683
Document ViewSet.action #5685
Fix schema docs typo #5687
Fix URL pattern parsing in schema generation #5689
Add example using source=‘*’
to custom field docs. #5688
Fix format_suffix_patterns behavior with Django 2 path() routes #5691
See 3.7.4 Milestone
AppRegistryNotReady
error importing contrib.auth views #5567Point release for 3.7.x
allow_null=True
should imply a default serialization value #5518drf_create_token
command #5550wheel
] section to [bdist_wheel
] as the former is legacy #5557See 3.7.2 Milestone
source
fields #5489Headline feature is the ability to add per-view customisation to schema generation.