Skip to content

Releases: Vacasa/drf-jsonapi

1.0.3

21 May 19:16
e9f661e
Compare
Choose a tag to compare

Included in this Release:

Bug/issue 62 relationship links and data #63 - @ddobson

0.5.4

09 May 22:42
b3afc41
Compare
Choose a tag to compare

Included in this Release:

Bug/59 Fix status code when removing already-removed relationship #60 - @tpansino

1.0.2

26 Apr 16:45
19f1a3c
Compare
Choose a tag to compare

Included in this Release:

ISSUE-57 Return empty qs if validations fail #58 - @ddobson

1.0.1

23 Apr 18:26
4e80a4a
Compare
Choose a tag to compare

Included in this Release:

ISSUE 49: Fix parsing errors #51 - @ddobson

0.5.3

23 Apr 23:49
Compare
Choose a tag to compare

Included in this Release:

Bug/53 Fix resource save for models with multiple To-One relationships #56 - @tpansino

0.5.2

23 Apr 15:51
4c8615e
Compare
Choose a tag to compare

Included in this Release:

Bugs 46 & 53 Fix PATCHing To-One relationships (for support/0.x) #54 - @tpansino

1.0.0

18 Apr 21:12
Compare
Choose a tag to compare

Included in this Release:

1.0rc #45 - @chrisbrantley

DRF-JSONAPI 1.0 Migration Guide

For migrating your drf-jsonapi project from <= 0.5.1 to >= 1.0.0. This guide includes some helpful information & examples for navigating breaking changes but is by no means exhaustive.

Serializers

  • Replace the meta base_path attribute with basename. Leading forward slashes are no longer needed.
  • Remove relationships() meta class attribute and add a static method called define_relationships on the serializer. This method should return a dictionary of relationship handler objects
# Before

from .relationships import OwnerRelationshipHandler

class CarSerializer(ResourceModelSerializer):
    class Meta:
        type = "car"
        base_path = "/cars"
        model = Car
        fields = ("make", "model", "year")
        relationships = {
            "owners": OwnerRelationshipHandler()
        }

# After

from drf_jsonapi.relationships import RelationshipHandler
from api.owners.serializers import OwnerSerializer

class CarSerializer(ResourceModelSerializer):
    class Meta:
        type = "car"
        basename = "cars"
        model = Car
        fields = ("make", "model", "year")

    @staticmethod
    def define_relationships():
        return {
            "owners": RelationshipHandler(OwnerSerializer, many=True)
        }

URLs

  • RelationshipRouter has been removed and is no longer necessary. Set your relationships in your serializer via define_relationships() and use the new Router class.
  • The relationship segment of a relationship url path can be specified by passing url_segment to you relationship handler. See below for more detail.
# Before

from rest_framework_nested.routers import DefaultRouter
from drf_jsonapi.routers import RelationshipRouter
from api.views import CarViewSet, OwnerRelationshipViewSet
from api.urls import urlpatterns

router = DefaultRouter(trailing_slash=False)
router.register(^"/cars", CarViewSet, basename="cars")
owner_router = RelationshipRouter(
    router, r"owners", lookup="owners", trailing_slash=False
)
owner_router.register(
    r"relationships/owners", views.OwnerRelationshipViewSet, base_name="owners"
)
urlpatterns += router.urls + owner_router.urls

# After

from drf_jsonapi.routers import Router
from api.views import CarViewSet

router = Router(trailing_slash=False)
router.register(CarViewSet)

urlpatterns += router.urls

Relationships

  • RelationshipHandler classes now have __init__ arguments.
  • The handler's serializer class must now be passed as the first argument to a RelationshipHandler instance. This value may be a serializer class or a module string that resolves to a serializer class.
  • The dictionary key of a serializer's define_relationships() method will determine the default segment name used for relationship urls. This functionality can be overwritten by passing the url_segment kwarg to the handler on initialization.
# Given the following handler, the cars relationship GET would look like this: /cars/:id/relatonships/owners

handler = RelationshipHandler(
    OwnersSerializer,
    many=True,
    related_field="owners",
)

# If the desired endpoint was instead: /cars/:id/relatonships/car-owners
# Modify the handler with a `url_segment` kwarg like shown below.

handler = RelationshipHandler(
    OwnersSerializer,
    many=True,
    related_field="owners",
    url_segment="car-owners",
)

1.0.0rc3

17 Apr 18:21
Compare
Choose a tag to compare
1.0.0rc3 Pre-release
Pre-release

Included in this Release:

1.0rc #45 - @chrisbrantley

Includes the following fixes & modifications:

  • RelationshipHandler now uses importlib instead of pydoc to resolve module string paths into serializer classes

1.0.0rc2

11 Apr 18:24
Compare
Choose a tag to compare
1.0.0rc2 Pre-release
Pre-release

Included in this Release:

1.0rc #45 - @chrisbrantley

Includes the following fixes & modifications:
- Import relationship serializers by string
- Allow relationship URL segment override
- Fix relationship mixin view methods looking for non-existent self.relationship

1.0.0rc

28 Mar 21:06
bb78270
Compare
Choose a tag to compare
1.0.0rc Pre-release
Pre-release

Included in this Release:

1.0rc #45 - @chrisbrantley