django-rest-framework到端点的链接列表

时间:2017-08-19 23:01:10

标签: python django django-rest-framework

使用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/"}

2 个答案:

答案 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/',
    ...
]
}

参考文献:

django-rest-framework HyperLinkRelatedField Documentation.