Rest Framework:HyperlinkedRelatedField,返回多个属性?

时间:2015-06-20 03:40:22

标签: django django-rest-framework

Django Rest Framework的HyperlinkedRelatedField用于序列化相关字段,如下所示:

'tracks': [
    'http://www.example.com/api/tracks/45/',
    'http://www.example.com/api/tracks/46/',
    'http://www.example.com/api/tracks/47/'
]

我正在寻找一种方法来返回多个属性,例如:

'tracks': [
    {'id': 45, 'href': 'http://www.example.com/api/tracks/45/'},
    {'id': 46, 'href': 'http://www.example.com/api/tracks/46/'},
    {'id': 47, 'href': 'http://www.example.com/api/tracks/47/'}
]

有没有办法使用DRF的标准序列化器实现这一目标?

1 个答案:

答案 0 :(得分:2)

您可以使用嵌套的序列化程序。 DRF中的所有序列化程序也可用作字段:

class TrackSerializer(ModelSerializer):
    class Meta:
        model = Track
        fields = ('id', 'href')

class YourModelSerializer(ModelSerializer):
    tracks = TrackSerializer(many=True)

你在official documentation中有一些例子,顺便提一下。

如果您想在tracks字段上进行读写访问,则必须覆盖create()上的update()YourModelSerializer。这是因为正确的行为取决于您的具体应用:它应该更新轨道的字段吗?它应该取代相关的轨道吗?如果是这样,它应该删除那些相关的吗?如果某些曲目不存在,它应该创建它们还是返回错误怎么办?

documentation for this非常彻底。