我有两个模型,一个是盒子,一个是盒子评论:
class BoxViewSet(viewsets.ModelViewSet):
queryset = Box.objects.all()
permission_classes = IsAuthenticated,
serializer_class = BoxSerializer
class BoxCommentViewSet(viewsets.ModelViewSet):
model = BoxComment
serializer_class = CommentSerializer
permission_classes = IsAuthenticated
def get_queryset(self):
# this should return a queryset that filters based on the
# box in the route
return BoxComment.objects.all()
如果我设置了一个路由器,使盒子在/boxes/
可用,在/boxes/{id}/
使用router.register(r'boxes', feed.views.BoxViewSet)
是否可以在/boxes/{id}/comments/
上提供评论?或者我应该设置一个单独的路由并使用GET/POST参数来引用特定的框?在
这通常被称为嵌套路由器(或嵌套视图集),在Django-REST框架中通常不建议这样做。如果可能,您应该在api中使用一个平面表示,因此
实际上是
^{pr2}$这在使用the built-in filtering(和maybe django-filter)的Django REST框架中实现要容易得多。它保证在将来的DRF版本中不会中断,它是recommended way at the moment。如果你感兴趣的话,HTTP API guidelines可能是一本很好的读物,这里还有一个discussion about it。在
现在,你不能总是避免使用嵌套路由器。我使用了当时可用的第三方软件包written about it in the past。从那时起,drf-extensions has integrated it并且它包含了一个合适的嵌套路由器实现,在大多数情况下都可以工作。在
我认为这样做没有任何问题(我已经在我的项目中使用了它,一切都很好)-您只需要一个带有
box_id
kwarg的url。这与“嵌套路由器”无关,它只是另一个通过url kwarg显式过滤的端点。在然后过滤掉
^{pr2}$get_queryset
中的相应注释相关问题 更多 >
编程相关推荐