是否有方法对嵌套序列化程序_set
排序,例如按pk
或time-stamp
排序。
因此,基本上是按下面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)
西尔利泽
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'
]
在您的
ViewSet
中,您可以指定一个带有自定义Prefetch
对象的queryset,您可以根据自己的喜好进行筛选和排序。预取只会导致一个额外的数据库查询(而不是使用SerializerMethodField
时每个父对象一个查询),从而大大提高了性能。旧的思路,但因为它仍然出现在谷歌,我想分享我的答案以及。尝试覆盖
Serializer.to_representation
方法。现在你基本上可以做任何你想做的事情,包括定制你的响应排序。就你而言:您可以使用
SerializerMethodField
并为此编写自定义方法。相关问题 更多 >
编程相关推荐