Smart Relationships
Structure
Migrating
Relationships when the foreign key is accessible
from app.models import Address
from django_forest.utils.collection import Collection
# Many to one relationships
class OrderForest(Collection):
def load(self):
self.fields = [
{
"field": "delivery_address",
"type": "String",
"reference": "Address.id",
"get": self.get_delivery_address,
}
]
def get_delivery_address(self, obj):
return obj.delivery_address
# Reverse relationship
class AddressForest(Collection):
def load(self):
self.fields = [
{
"field": "orders",
"type": ["String"],
"reference": "Order.id",
}
]
# urls.py
from app.views import AddressOrders
urlpatterns = [
path(
'/forest/address/<pk>/relationships/orders',
AddressOrdersView.as_view(),
name='address_orders'
),
# ...
]
# views.py
from django.http import JsonResponse
from django.views import generic
from django_forest.resources.utils.queryset import PaginationMixin
from django_forest.utils.schema.json_api_schema import JsonApiSchema
from app.models import Order
class AddressOrdersView(PaginationMixin, generic.ListView):
def get(self, request, pk, *args, **kwargs):
params = request.GET.dict()
queryset = Orders.objects.filter(delivery_address_id=pk)
# pagination
queryset = self.get_pagination(params, queryset)
# json api serializer
Schema = JsonApiSchema.get('orders')
data = Schema().dump(queryset, many=True)
return JsonResponse(data, safe=False)Relationships when you need complex logic to get a foreign key
Last updated