使用django-rest-framework,我需要创建一个端点,列出指向其他端点的链接。
router = DefaultRouter()
router.register(r'pepperonis', views.PepperoniViewSet, 'Pepperoni')
router.register(r'supremes', views.SupremeViewSet, 'Supreme')
router.register(r'some-unrelated-endpoint', views.UnrelatedViewSet, 'Unrelated')
我感兴趣的这些视图集都来自同一个类:
class Pizza(viewsets.ModelViewSet):
pass
class PepperoniViewSet(Pizza):
pass
class SupremeViewSet(Pizza):
pass
我可以从Pizza .__子类__()中获取所有相关的视图集。如何创建一个API端点,列出仅指向这些端点的超链接?
我需要端点返回这样的内容:
[{"url": "http://example.com/api/pepperonis/"}, {"url": "http://example.com/api/supremes/"}
答案 0 :(得分:0)
您希望此端点位于我们的API的基础上吗?如果是这样,(我可能是错的),但我相信默认路由器将自动在API的根目录创建一个链接到所有其他端点的端点。
答案 1 :(得分:0)
您可以在序列化程序中使用HyperlinkedRelatedField
来执行此操作。
示例:
class AlbumSerializer(serializers.ModelSerializer):
tracks = serializers.HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='track-detail'
)
class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')
它会得到如下结果:
{
'album_name': 'Graceland',
'artist': 'Paul Simon',
'tracks': [
'http://www.example.com/api/tracks/45/',
'http://www.example.com/api/tracks/46/',
'http://www.example.com/api/tracks/47/',
...
]
}
参考文献: