Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django REST框架中的嵌套资源_Python_Django_Rest_Django Rest Framework_Nested Resources - Fatal编程技术网

Python Django REST框架中的嵌套资源

Python Django REST框架中的嵌套资源,python,django,rest,django-rest-framework,nested-resources,Python,Django,Rest,Django Rest Framework,Nested Resources,我希望用嵌套资源实现我的新API Example: /api/users/:user_id/posts/ 将对特定用户的所有帖子进行评估。我还没有看到这个用例的工作示例,也许这不是实现RESTAPI的正确方法 要映射/api/users/:user\u id/posts/您可以使用@link() 如前所述,您将使用@detail\u route或@list\u route而不是@link()。请阅读文档以获取详细解释。如所述,@link装饰器被删除,取而代之的是@list\u route和@d

我希望用嵌套资源实现我的新API

Example: /api/users/:user_id/posts/

将对特定用户的所有帖子进行评估。我还没有看到这个用例的工作示例,也许这不是实现RESTAPI的正确方法

要映射
/api/users/:user\u id/posts/
您可以使用
@link()

如前所述,您将使用
@detail\u route
@list\u route
而不是
@link()
。请阅读文档以获取详细解释。

如所述,
@link
装饰器被删除,取而代之的是
@list\u route
@detail\u route
装饰器

更新:
@detail\u route
&
@list\u route
已被弃用,取而代之的是。 以下是备选解决方案:

解决方案1: 解决方案2: 试试看。还没有尝试过,但看起来很有希望,很多人已经在使用它了。看起来像是我们已经在努力实现的一个高级版本


希望这能有所帮助。

你被困在哪里了?假设您已经安装了OAUTH2,这是相当直接的。我的服务器将是什么样子?要选择哪些相关字段?链接装饰器被删除,取而代之的是列出的_route和detail_rout装饰器:@PranjalMittal use@detail_route(methods=['post'])。签出文档
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)

    
@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)