您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django REST框架中的分页关系?

5b51 2022/1/14 8:22:42 python 字数 3057 阅读 561 来源 www.jb51.cc/python

我们正在为我们的API使用Django REST框架,我们需要分页返回多个项目的关系字段. 演示使用与documentation类似的示例: class TrackSerializer(serializers.ModelSerializer): class Meta: model = Track fields = ('order', 'title') cl

概述

演示使用与documentation类似的示例:

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ('order','title')

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Album
        fields = ('album_name','artist','tracks')

相册的序列化输出示例:

{
    'album_name': 'The Grey Album','artist': 'Danger Mouse'
    'tracks': [
        {'order': 1,'title': 'Public Service Annoucement'},{'order': 2,'title': 'What More Can I Say'},{'order': 3,'title': 'Encore'},...
    ],}

这在专辑中有数百条曲目的问题.在这种情况下,是否有一种方式来分页“轨道”?

理想情况下,我知道在这种情况下,“轨道”应该指向一个API URL,该URL只是返回特定相册的曲目,而后者又可以轻松分页.该方法的不利之处是获得甚至前几个轨迹所需的额外请求(因此也是延迟等).在我们的例子中,它的重要性在于,我们可以通过对Album API的单一请求获得至少一些轨道,然后根据需要动态加载其余轨道.

DRF是否提供任何特定的功能或模式?还是有任何工作?

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ('order','title')

class PaginatedTrackSerializer(pagination.PaginationSerializer):
    class Meta:
        object_serializer_class = TrackSerializer

class AlbumSerializer(serializers.ModelSerializer):

    tracks = serializers.SerializerMethodField('paginated_tracks')


    class Meta:
        model = Album
        fields = ('album_name','tracks')


    def paginated_tracks(self,obj):
        paginator = Paginator(obj.tracks.all(),10)
        tracks = paginator.page(1)

        serializer = PaginatedTrackSerializer(tracks)
        return serializer.data

总结

以上是编程之家为你收集整理的Django REST框架中的分页关系?全部内容,希望文章能够帮你解决Django REST框架中的分页关系?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶