[英]django-rest-framework list of links to endpoints
Using django-rest-framework, I need to create an endpoint that lists links to other endpoints. 使用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')
These viewsets I'm interested in all inherit from the same class: 我感兴趣的所有这些视图集都继承自同一类:
class Pizza(viewsets.ModelViewSet):
pass
class PepperoniViewSet(Pizza):
pass
class SupremeViewSet(Pizza):
pass
I can get all the relevant viewsets from Pizza.__subclasses__(). 我可以从Pizza .__ subclasses __()获得所有相关的视图集。 How can I create an API endpoint that lists hyperlinks to only these endpoints?
如何创建仅列出到这些端点的超链接的API端点?
I'll need the endpoint to return something like this: 我需要端点返回如下内容:
[{"url": "http://example.com/api/pepperonis/"}, {"url": "http://example.com/api/supremes/"}
Do you want this endpoint to be at the base of our API? 您是否希望该终结点是我们API的基础? If so, (I could be wrong), but I believe the default router will automatically create an endpoint at the root of your API that links to all your other endpoints.
如果是这样,(可能是错误的),但是我相信默认路由器会在您API的根目录下自动创建一个端点,该端点链接到所有其他端点。
You can use HyperlinkedRelatedField
in your Serializer to do this. 您可以在序列化程序中使用
HyperlinkedRelatedField
来执行此操作。
Example: 例:
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')
It will give result like: 它将给出如下结果:
{
'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/',
...
]
}
References: 参考文献:
django-rest-framework HyperLinkRelatedField Documentation. django-rest-framework HyperLinkRelatedField文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.