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的标准序列化器实现这一目标?
答案 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
。这是因为正确的行为取决于您的具体应用:它应该更新轨道的字段吗?它应该取代相关的轨道吗?如果是这样,它应该删除那些相关的吗?如果某些曲目不存在,它应该创建它们还是返回错误怎么办?