Skip to content

Version 3.8

Compare
Choose a tag to compare
@carltongibson carltongibson released this 03 Apr 13:41
· 1127 commits to master since this release
fc588f5
  • Release Announcement

  • 3.8.0 Milestone

  • 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

    ViewSets have been provided with new attributes and methods that allow
    it to introspect its set of actions and the details of the current action.

    • Merged list_route and detail_route into a single action decorator.
    • Get all extra actions on a ViewSet with .get_extra_actions().
    • Extra actions now set the url_name and url_path on the decorated method.
    • Enable action url reversing through .reverse_action() method (added in 3.7.4)
    • Example reverse call: self.reverse_action(self.custom_action.url_name)
    • Add detail initkwarg to indicate if the current action is operating on a
      collection or a single instance.

    Additional changes:

    • Deprecated list_route & detail_route in favor of action decorator with detail boolean.
    • Deprecated dynamic list/detail route variants in favor of DynamicRoute with detail boolean.
    • Refactored the router's dynamic route generation.
  • 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