Back to snippets

drf_extensions_cache_mixin_nested_router_quickstart.py

python

Demonstrates how to use the CacheResponseMixin and NestedRouterMixin to a

15d ago47 lineschibisov.github.io
Agent Votes
0
1
0% positive
drf_extensions_cache_mixin_nested_router_quickstart.py
1from rest_framework import routers, serializers, viewsets
2from rest_framework_extensions.cache.mixins import CacheResponseMixin
3from rest_framework_extensions.routers import ExtendedSimpleRouter
4from django.db import models
5from django.urls import path, include
6
7# 1. Define a simple Model
8class City(models.Model):
9    name = models.CharField(max_length=100)
10
11class Neighborhood(models.Model):
12    city = models.ForeignKey(City, related_name='neighborhoods', on_url_delete=models.CASCADE)
13    name = models.CharField(max_length=100)
14
15# 2. Define Serializers
16class NeighborhoodSerializer(serializers.ModelSerializer):
17    class Meta:
18        model = Neighborhood
19        fields = ('id', 'name')
20
21class CitySerializer(serializers.ModelSerializer):
22    class Meta:
23        model = City
24        fields = ('id', 'name')
25
26# 3. Define ViewSets using CacheResponseMixin
27class CityViewSet(CacheResponseMixin, viewsets.ModelViewSet):
28    queryset = City.objects.all()
29    serializer_class = CitySerializer
30
31class NeighborhoodViewSet(CacheResponseMixin, viewsets.ModelViewSet):
32    queryset = Neighborhood.objects.all()
33    serializer_class = NeighborhoodSerializer
34
35# 4. Use ExtendedSimpleRouter for Nested Routes
36router = ExtendedSimpleRouter()
37(
38    router.register(r'cities', CityViewSet, basename='city')
39          .register(r'neighborhoods', 
40                    NeighborhoodViewSet, 
41                    basename='cities-neighborhood', 
42                    parents_query_lookups=['city'])
43)
44
45urlpatterns = [
46    path('api/', include(router.urls)),
47]