私はdefaultrouterにを拡張し、私が欲しいまさにんエントリを追加できることを発見した:
class UserRouter(routers.DefaultRouter):
routes = [
routers.Route(
url=r'^{prefix}{trailing_slash}$',
mapping={'get': 'list'},
name='{basename}-list',
initkwargs={'suffix': 'List'}
),
routers.Route(
url=r'^companies/(?P<company_id>[0-9]+)/{prefix}{trailing_slash}$',
mapping={'get': 'list'},
name='{basename}-list',
initkwargs={'suffix': 'List'}
),
routers.Route(
url=r'^{prefix}/{lookup}$',
mapping={'get': 'retrieve'},
name='{basename}-detail',
initkwargs={'suffix': 'Detail'}
),
]
私はあまりにもデフォルトルートを書き換えていますので、これは少し冗長です。
その後、私は、直接DRFルータにルータを追加することができます短い:
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
router.routes.append(
routers.Route(
url=r'^companies/(?P<company_id>[0-9]+)/{prefix}{trailing_slash}$',
mapping={'get': 'list'},
name='{basename}-list',
initkwargs={'suffix': 'List'}
),
)
私はこのソリューションを使用するつもりですが、私は他の開発者がこのようなケースを解決しているかどうかを知るのが大好きです別の方法:)
ルーカス、私にとっては解決策は複雑だと思われる。必要なものを表現するために別のエンドポイント(ビューセット)を持たないのはなぜですか? DRFのネストされたルート?私は上記のコードを維持することは非常に複雑であると思っています、特にコードベースの非オリジナルの開発者 – DmitrySemenov