Art*_*sov 6 django django-rest-framework drf-nested-routers
我正在使用drf-nested-routers包构建嵌套API .
但是/domains/1/nameservers/给了我所有的名字服务器,不仅仅是一个与域#1相关的名字服务器
我认为问题是我使用默认教程NameServerViewSet实现
class NameserverViewSet(viewsets.ModelViewSet):
queryset = Nameserver.objects.all()
serializer_class = NameserverSerializer
Run Code Online (Sandbox Code Playgroud)
请帮我正确编码.
以下是drf-nested-routers github页面的示例.
drf-nested-routers提供了嵌套路由器,可以在下面生成url模式
\ domain\< - 域名列表\域{pk}\< - 一个域名,来自{pk]
\ domain {domain_pk} \nameservers\< - 域的名称服务器
{domain_pk}\domain {domain_pk} \nameservers\{pk}\< - 来自{pk}的特定域名服务器,来自{domain_pk}的域名
这是一个例子:
# urls.py
from rest_framework_nested import routers
from views import DomainViewSet, NameserverViewSet
(...)
router = routers.SimpleRouter()
router.register(r'domains', DomainViewSet)
domains_router = routers.NestedSimpleRouter(router, r'domains', lookup='domain')
domains_router.register(r'nameservers', NameserverViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'^', include(domains_router.urls)),
)
Run Code Online (Sandbox Code Playgroud)
以下是ViewSet的实现方式:
class NameserverViewSet(viewsets.ViewSet):
queryset = Nameserver.objects.all()
def list(self, request, domain_pk=None):
queryset = self.queryset.filter(domain=domain_pk)
serializer = NameserverSerializer(queryset, many=True)
return Response(serializer.data)
def retrieve(self, request, pk=None, domain_pk=None):
queryset = self.queryset.get(pk=pk, domain=domain_pk)
serializer = NameserverSerializer(queryset)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
不需要覆盖所有操作,您只需覆盖“ get_queryset() ”
class NameserverViewSet(viewsets.ViewSet):
queryset = Nameserver.objects.all()
def get_queryset(self):
if self.kwargs.get('domain_pk'):
return Nameserver.objects.filter(domain=domain_pk)
else:
return super(NameserverViewSet, self).get_queryset()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6079 次 |
| 最近记录: |