有一個使用REST API的Django項目。Django REST:在1個url上顯示詳細信息和列表
大多數鏈接圖案的遵循相同的範例:
/foo_config/1
基本上/list-view/details-view
但還有另一種類型的配置的 - 這隻能有1個對象,所以示出了它喜歡/bar_config/1
是混亂的,因爲用戶可能會期望#2和#3等。
我想'映射'bar_config
細節和列表一起使用簡單/bar_config
。
使用@detail_route
試過,但它不工作:
@detail_route(methods=['put'])
def put_config(self, request):
...
如何實現我的目標?
更新:在嘗試玩detail_route
和伊萬Semochkin答案 - 仍然沒有運氣。我將提供什麼,我有更多的細節:
/accounts/foo_account/bar_config/
< - 列表視圖 /accounts/foo_account/bar_config/1
< - 詳細信息視圖定義爲
帳戶:
router = routers.DefaultRouter()
router.register('accounts', AccountViewSet)
目標是:
- 顯示
bar_config/1
在bar_config
(PUT在LIST頁面上); - 禁止/隱藏
bar_config/1
; - 允許查看和更新信息,禁止創建/刪除;
我會總結一下:我需要改變子鏈接在現有項目中的工作方式,它已經在所有模式中使用DefaultRouter
。這個子鏈接映射單例模型。我想在列表(GET)頁面上顯示更新(PUT)數據。
我需要一個只讀模型(no創建,不刪除)。也希望能夠直接在列表視圖上放置。 – Oleg
@ h3d0所以你可以使用'ModelViewSet'來代替,並執行與'retrieve'方法相同的操作。但是'put'有一個問題,你需要覆蓋默認的url,因爲默認情況下它是w8的查找字段,就像pk在檢索中一樣。 –
這是一個問題:如何覆蓋'put'中的默認網址。 – Oleg