Back to snippets
drf_extensions_cache_mixin_nested_router_quickstart.py
pythonDemonstrates how to use the CacheResponseMixin and NestedRouterMixin to a
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]