Tal*_*etz 15 python django rest nested-resources django-rest-framework
我希望用嵌套资源实现我的新API.
Example: /api/users/:user_id/posts/
Run Code Online (Sandbox Code Playgroud)
将评估特定用户的所有帖子.我还没有看到这个用例的工作示例,也许这不是实现rest API的正确方法?
Ank*_*pli 22
正如评论说达尼洛的@link装饰得到了有利于去除@list_route和@detail_route装饰.
@detail_route&@list_route弃用赞成@action.这是替代解决方案:
@detail_route()
def posts(self, request, pk=None):
owner = self.get_object()
posts = Post.objects.filter(owner=owner)
context = {
'request': request
}
post_serializer = PostSerializer(posts, many=True, context=context)
return Response(post_serializer.data)
Run Code Online (Sandbox Code Playgroud)
试试drf-nested-routers.尚未尝试过,但看起来很有希望,许多人已经在使用它.看起来像我们已经尝试实现的高级版本.
希望这可以帮助.
要映射/api/users/:user_id/posts/可以装饰一个posts你的内部方法ViewSet与@link()
from rest_framework.decorators import link
from rest_framework.response import Response
class UserViewSet(viewsets.ModelViewSet):
model = User
serializer_class = UserSerializer
# Your regular ModelViewSet things here
# Add a decorated method like this
@link()
def posts(self, request, pk):
# pk is the user_id in your example
posts = Post.objects.filter(owner=pk)
# Or, you can also do a related objects query, something like:
# user = self.get_object(pk)
# posts = user.post_set.all()
# Then just serialize and return it!
serializer = PostSerializer(posts)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8273 次 |
| 最近记录: |