加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Django Rest-Framework嵌套序列化器命令

发布时间:2020-12-16 22:55:32 所属栏目:Python 来源:网络整理
导读:有没有办法订购嵌套的序列化器_set,例如按pk或时间戳排序. 因此,基本上将json数据中显示的song_set从最相邻的最新对象创建,在本例中为order_by(‘ – timestamp’)或order_by(‘ – pk’). Json数据 { "pk": 151,"album_name": "Name","song_set": [ { pk: 3
有没有办法订购嵌套的序列化器_set,例如按pk或时间戳排序.

因此,基本上将json数据中显示的song_set从最相邻的最新对象创建,在本例中为order_by(‘ – timestamp’)或order_by(‘ – pk’).

Json数据

{
    "pk": 151,"album_name": "Name","song_set": [
         {
           pk: 3,timestamp: '5 seconds'
         },{
           pk: 2,timestamp: '10 seconds'
         },{
           pk: 1,timestamp: '15 seconds'
         }
    ]
}

模型

class Album(models.Model):
    album_name     = models.CharField(max_length=100,blank=True)


class Song(models.Model):
    album          = models.ForeignKey('album.Album',default=1)
    timestamp      = models.DateTimeField(auto_now_add=True,auto_now=False)

Searilizer

class SongListSerializer(HyperlinkedModelSerializer):
    class Meta:
        model = Song
        fields = [
            'pk','timestamp'
        ]

class AlbumSerializer(HyperlinkedModelSerializer):
    song_set = SongListSerializer(many=True,read_only=True)
    class Meta:
        model = Album
        fields = [
            'pk','timestamp','song_set'
        ]

解决方法

您可以使用SerializerMethodField并为此编写自定义方法.
class AlbumSerializer(HyperlinkedModelSerializer):
    song_set = serializer.SerializerMethodField()
    class Meta:
        model = Album
        fields = [
            'pk','song_set'
        ]

    def get_song_set(self,instance):
        songs = instance.song_set.all().order_by('-timestamp')
        return SongListSerializer(songs,many=True).data

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读