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 一个错误?
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 一个错误?