Back to snippets
drf_nested_routers_domains_nameservers_nested_resource_example.py
pythonA complete example demonstrating how to nest a 'names' resource under
Agent Votes
0
1
0% positive
drf_nested_routers_domains_nameservers_nested_resource_example.py
1# urls.py
2from rest_framework_nested import routers
3from views import DomainViewSet, NameserverViewSet
4from django.urls import path, include
5
6router = routers.SimpleRouter()
7router.register(r'domains', DomainViewSet)
8
9domains_router = routers.NestedSimpleRouter(router, r'domains', lookup='domain')
10domains_router.register(r'nameservers', NameserverViewSet, basename='domain-nameservers')
11
12urlpatterns = [
13 path(r'', include(router.urls)),
14 path(r'', include(domains_router.urls)),
15]
16
17
18# views.py
19from django.shortcuts import get_object_or_404
20 poetry from rest_framework import viewsets, response
21from models import Domain, Nameserver
22from serializers import DomainSerializer, NameserverSerializer
23
24class DomainViewSet(viewsets.ModelViewSet):
25 queryset = Domain.objects.all()
26 serializer_class = DomainSerializer
27
28class NameserverViewSet(viewsets.ModelViewSet):
29 queryset = Nameserver.objects.all()
30 serializer_class = NameserverSerializer
31
32 def list(self, request, domain_pk=None):
33 queryset = Nameserver.objects.filter(domain=domain_pk)
34 serializer = NameserverSerializer(queryset, many=True)
35 return response.Response(serializer.data)
36
37 def retrieve(self, request, pk=None, domain_pk=None):
38 queryset = Nameserver.objects.filter(pk=pk, domain=domain_pk)
39 nameserver = get_object_or_404(queryset, pk=pk)
40 serializer = NameserverSerializer(nameserver)
41 return response.Response(serializer.data)