Rest Framework:HyperlinkedRelatedField,return 多个属性?

Rest Framework: HyperlinkedRelatedField, return multiple attributes?

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/'
]

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

'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 的标准序列化器实现此目的?

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

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

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

你在 official documentation 中有示例,顺便说一句,非常接近。

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

documentation for this讲的真透彻