我想在更改查询集的 View 下创建一个 subview (如果这是正确的术语?)
parent URL
mysite.com/api/sites
Child URL
mystic.com/apit/sites/open
而且每个 URL 都可以这样搜索
parent URL
mysite.com/api/sites/search=London
Child URL
mystic.com/api/sites/open/search=London
我的父 View 、序列化程序和 URL 已存在
class SiteROView(viewsets.ReadOnlyModelViewSet):
queryset = Site.objects.all()
serializer_class = SiteSerializer
permission_classes = (IsAdminUser,)
filter_class = Site
filter_backends = (filters.SearchFilter,)
search_fields = ('location','postcode','state')
所以我想我需要以某种方式添加子网址
class SiteROView(viewsets.ReadOnlyModelViewSet):
queryset = Site.objects.all()
serializer_class = SiteSerializer
permission_classes = (IsAdminUser,)
filter_class = Site
filter_backends = (filters.SearchFilter,)
search_fields = ('location','postcode','state')
def url_open:
queryset = Site.objects.filter(state='open')
这可能吗?我该如何实现?
谢谢
最佳答案
您可以使用detail_route装饰器来做到这一点
from rest_framework.response import Response
class SiteROView(viewsets.ReadOnlyModelViewSet):
..........
# your codes up here
@list_route(methods=['get'],url_path='open' permission_classes=[YourPermissionClass])
def open(self, request, *args, **kwargs):
# your rest of code and response
queryset = <your_filtered_queryset>
serializer = self.serializer_class(queryset, many=True)
return Response(data=serializer.data)
关于Django DRF - 添加 subview /url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57198173/