Django Rest-Framework嵌套序列化程序顺序 [英] Django Rest-Framework nested serializer order
本文介绍了Django Rest-Framework嵌套序列化程序顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以订购嵌套序列化器 set
,例如按 pk
或<$ c $进行订购c>时间戳。
Is there a way to order a nested serializer _set
, for example order by pk
or time-stamp
.
因此基本上订购json数据中显示的 song_set
从最近创建的对象到最新创建的对象,在这种情况下,由 order_by('-timestamp')
或 order_by('-pk')
。
So basically order song_set
shown in the json data below from the most recent to the latest object created, in this case by order_by('-timestamp')
or 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)
序列化器
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
并为此编写自定义方法。
You can use SerializerMethodField
and write custom method for this.
class AlbumSerializer(HyperlinkedModelSerializer):
song_set = serializers.SerializerMethodField()
class Meta:
model = Album
fields = [
'pk',
'timestamp',
'song_set'
]
def get_song_set(self, instance):
songs = instance.song_set.all().order_by('-timestamp')
return SongListSerializer(songs, many=True).data
这篇关于Django Rest-Framework嵌套序列化程序顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文