Django休息框架:query_route中的查询参数

前端之家收集整理的这篇文章主要介绍了Django休息框架:query_route中的查询参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下ViewSet:
class BookViewSet(DefaultsMixin,viewsets.ModelViewSet):
   queryset = Book.objects.all()
   serializer_class = BookSerializer

   @detail_route()
   def chapter(self,request,pk=None):
       queryset = Chapter.objects.filter(book__pk=pk)
       serializer = ChpaterSerializer(queryset,context={'request':request},many=True)
       return Response(serializer.data)

所以url“/ book / {id} / chapter”有效.
但是我不知道如何配置ViewSet来拥有像“/ book / {id} / chapter / {id}”这样的URL.
也许答案是使用lookup_field或lookup_url_kwarg,但我没有在detail_route案例中找到使用它们.

解决方法

您可以在detail_route中添加url_path,如下所示:
@detail_route(url_name='chapter',url_path='chapter/(?P<chapter_id>[0-9]+)')
def chapter(self,pk=None,chapter_id=None):
   queryset = Chapter.objects.filter(book__pk=pk)
   serializer = ChpaterSerializer(queryset,many=True)
   return Response(serializer.data)

请注意,默认路由器中的url的名称默认为url_path参数(如果提供).所以视图名称将包含查询参数字符串.通过指定url_name参数,您可以简化.我建议使用方法名称,如果没有指定url_path,那么这是默认值.有了这个,你可以用url来反转

reverse('book-chapter',kwargs={'pk': 1,'chapter_id': 4})
原文链接:https://www.f2er.com/python/185647.html

猜你在找的Python相关文章