2017-08-19 19 views
0

使用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') 

這些viewsets我感興趣的都來自同一個類繼承:

class Pizza(viewsets.ModelViewSet): 
    pass 

class PepperoniViewSet(Pizza): 
    pass 

class SupremeViewSet(Pizza): 
    pass 

我可以從比薩.__子類的所有相關viewsets __()。我如何創建一個API端點列出只有這些端點的超鏈接?

我需要端點返回是這樣的:

[{"url": "http://example.com/api/pepperonis/"}, {"url": "http://example.com/api/supremes/"} 
+0

做你讀它:https://stackoverflow.com /問題/ 1275486/Django的知識,可以-I-看到-A-列表中,urlpa tterns –

回答

0

你想這個端點是在我們的API的基礎?如果是這樣(我可能是錯的),但我相信默認路由器會自動在您的API的根目錄創建一個端點,鏈接到所有其他端點。

+0

端點將需要明確。我對放置端點的位置具有靈活性,但我還需要包含模型的詳細名稱等內容。 – Jon

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.